1

私のプログラムは、いくつかのメソッドを公開し、複数のクライアントを持つ WCF サービスです。クライアントのリストをデータベースに保存します。一部のメソッドでは、データベースから呼び出し元のデータを照会する必要があります。この質問 サービスはどのようにして発信者を知ることができますか? リンクされた回答Get the Client's Address in WCFは、発信者の IP を取得する方法を示しています。ただし、通常、クライアント テーブルのアドレス フィールドには IP がありませんが、次のようなものです。

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

有効なエンドポイント アドレスです。リンクされた回答でソリューションを使用し、発信者の IP を取得したとしましょう (たとえばhttp://192.80.212.21:80/)。ただし、データベースでは、クライアントはhttp://computerName:80/データベースから対応するクライアントのエントリを取得できるように、これら 2 つのアドレスが同じであることを確認するにはどうすればよいですか?

クライアントの数は非常に少ないため、データベース内のすべての行を反復することによるパフォーマンスの問題は無視できます。

4

1 に答える 1

0

クライアントの IP アドレスに関連付けられているホスト名を特定するには、 DNS ルックアップを実行する必要があります。

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した をデータベースに格納されているアドレスと照合できます。

于 2012-02-23T14:07:05.013 に答える