2009-04-17 25 views
14

複数のWebサーバーでIIS経由でホストされているWCFサービスがあります。私は、データベースへの呼び出しを記録するロギングメソッドを持っていて、呼び出しが実行されているサーバーを記録したいと思います。WCF:ホストIPまたはサーバー名を取得する方法

WCF呼び出しが実行されているホストサーバー名またはIPアドレスを取得する方法を知っている人はいますか?

答えて

12

Dns.GetHostName()を使用します。これは、ホストIPよりもコンピュータの名前を取得するほうがはるかに優れているためです。ホストコンピュータに複数のIPアドレスがあり、仮想ネットワークカード(VMWare)がある場合を考えてみましょう。

1

Dns.GetHostName()は、私が最もよく使うものです。

5

これは私たちのために働いたものです。 System.ServiceModelへの参照があることを確認してください。そして、あなたのサービスメソッドに次のコードを実装:

var context = System.ServiceModel.OperationContext.Current; 

RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name]; 

string externalIP = property.Address; 
+4

ホストのアドレスではなく、クライアントのIPアドレスです。 – berdem

1
Environment.MachineName 

は、多くのサーバーが複数のホスト名を持っていて、どちらかわからないので、

0

DNSホスト名が機能しないことaxactlyありませんサービスが呼び出されました。 IIRCでは、IISは、ホスト名が指定された異なるWebサービスを呼び出して問題を悪化させることができます。 .Currentを使用することは、単一のインスタンスを実行していない場合には優れています。この場合、常にnull以外のコンテキストオブジェクトはありません。これは上記のすべての場合です。他の誰かがより強固なものを持っている場合は、共有してください:)

0

次のコードを使用して、server(host)の現在のベースアドレスを取得できます。

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
関連する問題