Я использую 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 ()
Вы должны попытаться выяснить, откуда именно исходит 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]
.