Вот метод я использую, чтобы получить 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 и веб-проектов, так что вы может потребоваться второй раздел. Вы не получите IP-адрес, если вы поражаете свой локальный хост во время разработки - вы получите «:: 1», как вы заметили. Но вы получите его, если его развернете на сервере.
Вы используете как клиент, так и сервер на одном компьютере, а не через прокси. Нет прокси == Нет HTTP_X_FORWARDED_FOR. Тот же самый компьютер, ':: 1' является адресом loopback (a.k.a' localhost') –