複数のWebサーバーでIIS経由でホストされているWCFサービスがあります。私は、データベースへの呼び出しを記録するロギングメソッドを持っていて、呼び出しが実行されているサーバーを記録したいと思います。WCF:ホストIPまたはサーバー名を取得する方法
WCF呼び出しが実行されているホストサーバー名またはIPアドレスを取得する方法を知っている人はいますか?
複数のWebサーバーでIIS経由でホストされているWCFサービスがあります。私は、データベースへの呼び出しを記録するロギングメソッドを持っていて、呼び出しが実行されているサーバーを記録したいと思います。WCF:ホストIPまたはサーバー名を取得する方法
WCF呼び出しが実行されているホストサーバー名またはIPアドレスを取得する方法を知っている人はいますか?
Dns.GetHostName()を使用します。これは、ホストIPよりもコンピュータの名前を取得するほうがはるかに優れているためです。ホストコンピュータに複数のIPアドレスがあり、仮想ネットワークカード(VMWare)がある場合を考えてみましょう。
Dns.GetHostName()は、私が最もよく使うものです。
これは私たちのために働いたものです。 System.ServiceModelへの参照があることを確認してください。そして、あなたのサービスメソッドに次のコードを実装:
var context = System.ServiceModel.OperationContext.Current;
RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];
string externalIP = property.Address;
Environment.MachineName
は、多くのサーバーが複数のホスト名を持っていて、どちらかわからないので、
DNSホスト名が機能しないことaxactlyありませんサービスが呼び出されました。 IIRCでは、IISは、ホスト名が指定された異なるWebサービスを呼び出して問題を悪化させることができます。 .Currentを使用することは、単一のインスタンスを実行していない場合には優れています。この場合、常にnull以外のコンテキストオブジェクトはありません。これは上記のすべての場合です。他の誰かがより強固なものを持っている場合は、共有してください:)
次のコードを使用して、server(host)の現在のベースアドレスを取得できます。
using System.ServiceModel;
var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;
ホストのアドレスではなく、クライアントのIPアドレスです。 – berdem