WCF 4 Rest 如何获取请求的 IP 地址?

21

嘿,你如何在类似以下情况中获取发出请求的人的IP地址:

    [ServiceContract]    
    [AspNetCompatibilityRequirements(RequirementsMode = 
    AspNetCompatibilityRequirementsMode.Required)]    
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]        
    public partial class UsersService
    {                          
        [WebInvoke(UriTemplate = "", Method = "PUT")]        
        public User AddNewUser(User newUser)
        {            
            // code goes here including GETTING AN IP??
        }

谢谢!

1个回答

39

在AddNewUser内使用以下代码片段:

OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpointProperty =
  messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

RemoteEndpointMessageProperty实例提供了Address和Port属性。


1
问题是,除非在.Net 4中有所改变,否则在使用WebHttpBinding时很难获得OperationContext。我能够通过创建MessageInspector来实现,但它需要相当多的额外操作。 - Darrel Miller
我不确定你的意思是什么。即使是在WebHttpBinding上公开的REST服务中,OperationContext在任何WCF调用中都必须可用。我在WCF 4中进行了测试,它可以正常工作。 - Ladislav Mrnka
在 .Net 3.5 中,使用 WebHttpBinding 可以访问 WebOperationContext,但是 OperationContext 不是直接可用的。很高兴听到在 4.0 中已经修复了这个问题。 - Darrel Miller
我不知道为什么我得到了我托管服务的服务器名称。我想获取客户端详细信息。 - Ziggler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接