如何在WebMethod中获取调用者的IP地址?

如何在WebMethod中获取调用者的IP地址?

[WebMethod] public void Foo() { // HttpRequest... ? - Not giving me any options through intellisense... } 

使用C#和ASP.NET

HttpContext.Current.Request.UserHostAddress是你想要的。

只是谨慎。 IP地址不能用来唯一标识客户端。 NAT防火墙和企业代理无处不在,隐藏了许多用户在一个IP之后。

尝试:

 Context.Request.UserHostAddress 

尝试这个:

 string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

没有在webMethod中尝试过,但是我在标准的HttpRequests中使用它

HttpContext实际上在WebService基类中是可用的,所以只需使用Context.Request (或者也指向当前上下文的HttpContext.Current )来访问由HttpRequest提供的成员。

我做了以下function:

 static public string sGetIP() { try { string functionReturnValue = null; String oRequestHttp = WebOperationContext.Current.IncomingRequest.Headers["User-Host-Address"]; if (string.IsNullOrEmpty(oRequestHttp)) { OperationContext context = OperationContext.Current; MessageProperties prop = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; oRequestHttp = endpoint.Address; } return functionReturnValue; } catch (Exception ex) { return "unknown IP"; } } 

这项工作只在Intranet上,如果你有一些代理服务器或者你应该研究,如果原始IP被移动到http数据包的其他地方。