这是我用来获取 IP 地址的方法:
private static string GetIPAddress()
{
try
{
if (System.ServiceModel.OperationContext.Current != null)
{
var endpoint = OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return endpoint.Address;
}
if (System.Web.HttpContext.Current != null)
{
// Check proxied IP address
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] + " via " +
HttpContext.Current.Request.UserHostAddress;
else
return HttpContext.Current.Request.UserHostAddress;
}
}
catch { }
return "Unknown";
}
请注意,第一部分适用于 WCF 服务,因为此代码来自我的日志记录代码,该代码与 WCF 和 Web 项目共享,因此您可能只需要第二部分。如果您在开发过程中访问本地主机,您将不会获得 IP —— 正如您所注意到的,您将获得“::1”。但是如果部署在服务器上,你会得到它。