25

WCF 接続のリモート IP アドレスを取得する方法はありますか?

WCF フレームワークに組み込まれていない理由は、WCF が非 TCP/IP バインディングで動作できるため、IP アドレスが常に意味を持つとは限らないためだと思います。

ただし、この情報は、広く使用されているすべてのバインディング (私の知る限り、BasicHttp、DualHttp、WSHttp、および NetTcp) にとって意味があります。

IP アドレスはおそらくリフレクションを使用してアクセスできますが、フレームワーク クラスにハッキングするよりも、文書化された取得方法を見つけたいと思います。

私はこの問題についてググってみましたが、まともな解決策を見つけられずに多くの人がそれに遭遇したようです (通常の答えはメッセージ ヘッダーに依存することですが、これはクライアントが実際の IP アドレスを提供することを信頼していることを意味します。セキュリティ上の理由から IP アドレスをログに記録する場合はオプションではありません)

4

3 に答える 3

15

どうやらRemoteEndpointMessageProperty経由で 3.5 に追加されたようです。ここを参照してください。

于 2008-12-24T10:54:08.440 に答える
5
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string address = endpoint.Address;
于 2014-03-29T14:06:37.027 に答える
2

サービス側でクライアント IP を取得したい場合は、OperationContext のメッセージ プロパティを確認する必要があります。たとえば、ここまたはここを見てください

于 2008-12-24T10:02:08.777 に答える