web-dev-qa-db-ja.com

WCF 3.0でのクライアントIPアドレスの取得

WCF 3.5ではクライアントIPアドレスを簡単に取得できますが、WCF 3.0では取得できません。誰もが知っていますか?

82
Gaz

(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
36
Gaz

これは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;
152
Paul Mrozowski

.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

参照: http://msdn.Microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx

15
jangofetta