Клиентский IP-адрес в ASP.NET (.asmx) веб-сервисы

Я использую ASP.NET (.asmx) веб-сервисы с Silverlight. С тех пор нет никакого способа найти клиентский IP-адрес в Silverlight, я должен был зарегистрировать это в сервисный конец. Это некоторые методы, которые я попробовал:

Request.ServerVariables("REMOTE_HOST")
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Request.UserHostAddress()
Request.UserHostName()
string strHostName = Dns.GetHostName();
string clientIPAddress = Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

Все вышеупомянутые методы хорошо работают в моей локальной системе, но когда я публикую свой сервис на рабочий сервер, это начинает давать ошибки,

Ошибка: Ссылка на объект не набор к экземпляру объекта. StackTrace:

в System. Сеть. Хостинг. ISAPIWorkerRequestInProc. GetAdditionalServerVar (индекс Int32)

в System. Сеть. Хостинг. ISAPIWorkerRequestInProc. GetServerVariable (Имя строки)

в System. Сеть. Хостинг. ISAPIWorkerRequest. GetRemoteAddress ()

в System. Сеть. HttpRequest.get_UserHostAddress ()

7
задан Peter Mortensen 18 February 2011 в 09:06
поделиться

1 ответ

Вы должны попытаться выяснить, откуда именно исходит NullReferenceException . Измените свой код, чтобы понять, что некоторые вещи могут возвращать null. Например, в

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]

HttpContext.Current может вернуть значение null, или .Request может вернуть значение null, или .ServerVariables ["REMOTE_ADDR"] может вернуть значение null. Кроме того, в

string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

GetHostAddresses (strHostName) может возвращать значение null или .GetValue (0) может возвращать значение null.

Если метод или свойство могут возвращать значение null, вы должны проверить его перед разыменованием. Например,

IPAddress[] hostAddresses = System.Net.Dns.GetHostAddresses(strHostName);
string clientIPAddress;
if (hostAddresses != null)
{
    object value = hostAddresses.GetValue(0);
    if (value != null)
    {
        clientIPAddress = value.ToString();
    }
}

P.S. Я не знаю, зачем вам использовать GetValue (0) . Вместо этого используйте hostAddresses [0] .

5
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: