在WCF 3.0中获取客户端IP地址

时间:2008-09-18 14:40:59

标签: wcf

显然,您可以轻松地在WCF 3.5中获取客户端IP地址,但不能在WCF 3.0中获取。谁知道怎么做?

3 个答案:

答案 0 :(得分:152)

这对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;

答案 1 :(得分:36)

事实证明,只要(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

答案 2 :(得分:15)

如果您的目标是.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