どうやら、WCF 3.5ではクライアントIPアドレスを簡単に取得できますが、WCF3.0では取得できません。誰もが方法を知っていますか?
回答:
これは3.0では役に立ちませんが、3.5でクライアントIPアドレスを取得しようとしているために、この質問を見つけてイライラしている人々を見ることができます。だから、ここに動作するはずのいくつかのコードがあります:
using System.ServiceModel;
using System.ServiceModel.Channels;
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
(a)サービスが(明らかに)Webサービスでホストされており、(b)次のようにAspNetCompatibilityモードを有効にしている限り、可能であることがわかります。
<system.serviceModel>
<!-- this enables WCF services to access ASP.Net http context -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
</system.serviceModel>
そして、次の方法でIPアドレスを取得できます。
HttpContext.Current.Request.UserHostAddress
HttpContext.Current.Request.UserHostAddress
.NET 3.0SP1をターゲットにしている場合は可能です。
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
クレジット:http: //blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx
参照:http: //msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx