WCF 3.5ではクライアントIPアドレスを簡単に取得できますが、WCF 3.0では取得できません。誰もが知っていますか?
(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
これは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;
.NET 3.0 SP1をターゲットにしている場合は可能です。
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