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


82

显然,您可以在WCF 3.5中轻松获得客户端IP地址,而在WCF 3.0中则不能。有人知道吗?

Answers:


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;

11
我无法编辑该帖子,但对我帮助很大,谢谢!想提一下有2个错误。应该是“ OperationContext”而不是“ OperationContent”,并且应该是“ RemoteEndpointMessageProperty”而不是“ RemoveEndpointMessageProperty”。
杰里米·穆林

3
安全说明:可以欺骗此值...请参阅MSDN
goodguys_activate 2012年

@ makerofthings7我在MSDN上看到了,但是真的可以被欺骗吗?该请求仍具有TCP握手。如果IP确实是被欺骗的,同步消息是否不会发送到错误的位置,从而连接甚至在开始之前就失败了?
费用

1
@cost在这种情况下,“ IP”不仅存在于TCP数据包中,而且也存在于WCF消息中,但是数据流(第7层)中的此文本未得到适当保护”
goodguys_activate

1
@shambulator我已经看到问题已有好几年了,但是下面的KB文章似乎表明它可能是端口,而不是ipaddress。 support.microsoft.com/kb/971842
goodguys_activate 2013年

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

11
然后您可以使用HttpContext.Current.Request.UserHostAddress
Jader Dias

3
请注意,这会带来一系列问题
user1496062 2014年

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/zh-cn/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx


3
好的,我好像获得了一个像“ fe80 :: 3dbc:a2ec”这样的IPv6。我在徘徊如何获取远程IP号码
JuniorMayhé09年

@ makerofthings7在制定安全决策时应该使用什么?
CSharper 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.