2012-02-23 6 views
1

私のプログラムは、いくつかのメソッドを公開し、複数のクライアントを持つWCFサービスです。これは、データベースのクライアントのリストを格納します。いくつかのメソッドでは、データベースから呼び出し元のデータを照会する必要があります。このquestion How can service know the caller?とリンクされた回答Get the Client’s Address in WCFは、発信者のIPを取得する方法を示しています。しかし、通常は私のクライアントテーブル内のアドレスフィールドには、IPアドレスを持っていないが、もののように:有効なエンドポイントアドレスです2つのエンドポイントアドレスが同じかどうかを確認する方法はありますか?

http://localhost:80/ 
http://computerName:80/ 
http://computerName.domain.com:80/ 

。私はリンクされた答えのソリューションを使用して、私は私の呼び出し元のIPを得ると想像してみましょう(たとえばhttp://192.80.212.21:80/)。しかし、データベースでは、クライアントはhttp://computerName:80/という名前で格納されています。これらの2つのアドレスが同じであることを確認すると、データベースから対応するクライアントのエントリを取得できます。

クライアントの数は非常に少ないため、データベースの各行を反復することによるパフォーマンスの問題はごくわずかです。あなたは、クライアントのIPアドレスを関連付けられているのホスト名を決定するためにDNSルックアップを行う必要があるでしょう

+0

「http:// localhost:80 /」と「http:// computerName:80 /」は同じではありません。最初のものはマシンの外ではアクセスできません。したがって、異なる。実際に – Aliostad

+0

です。しかし、クライアントが同じコンピュータからのものであれば、アドレスを入力した人はデータベースに入力することができ、同じことができます。 –

答えて

0

:その時点で

var clientEndpoint = OperationContext.Current 
    .IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 
var clientHostName = Dns.GetHostEntry(clientEndpoint.Address).HostName; 
var clientPort = clientEndpoint.Port; 

var clientUri = new UriBuilder("http", clientHostName, clientPort).ToString(); 

を、あなたは、データベースに格納されたアドレスに得られclientUriを一致させることができます。

+0

静的にはどういう意味ですか? –

+0

@LouisRhys [静的IPアドレス](http://en.wikipedia.org/wiki/IP_address#Uses_​​of_static_addressing)は、ネットワーク上の特定のマシンに直接関連付けられています。ただし、DNSルックアップを使用してIPアドレスをホスト名に関連付けることができるので、ここではそれほど重要ではありません。私は自分の答えを修正した。 –

関連する問題