Получить IP-адрес запрошенного клиента (Soap-сообщение) - PullRequest
3 голосов
/ 08 июня 2009

Я создал службу ASMX и код, который обрабатывает журнал ошибок, поступающий от ELMAH. Я добавляю в базу данных все поля и добавляю еще несколько, одним является IP-адрес запрашиваемого клиента ...

Но я не могу (пожалуйста, прочитайте, не знаю как) получить это ...

Я привык к

string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ipAddress == "") ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Но, конечно, здесь это не применимо, потому что это не запрос HTML, а запрос SOAP

в заголовке ALL_HTTP я получаю всю эту информацию:

HTTP_CONNECTION:Keep-Alive
HTTP_CONTENT_LENGTH:440331
HTTP_CONTENT_TYPE:text/xml; charset=utf-8
HTTP_EXPECT:100-continue
HTTP_HOST:www.mydomainname.com
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074)
HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA
HTTP_SOAPACTION:"http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors"

Где и как я могу получить запрашиваемый IP-адрес?

Обратите внимание, что я не использую никакой аутентификации (пока) ...:)

1 Ответ

2 голосов
/ 08 июня 2009

Вы должны иметь возможность использовать HttpContext.Current.Request.UserHostAddress, но это не будет надежно, если запрашивающая машина находится за прокси-сервером или устройством NAT. Вместо этого вы получите адрес прокси-сервера.


Я хочу пояснить - IP-адрес не является подходящим уникальным идентификатором. Он не идентифицирует компьютер. В лучшем случае он определяет адрес сетевого уровня, который один конкретный сетевой интерфейс на одном конкретном компьютере использует в одно конкретное время. В другое время тот же сетевой интерфейс может использовать другой IP-адрес. В другой момент времени один и тот же компьютер может иметь более одного сетевого интерфейса. Вы просто не можете сказать.

Кажется, я помню, что читал, что разработчики протоколов TCP / IP сознательно дали понять, что IP-адрес нельзя использовать в качестве уникального идентификатора компьютера. К сожалению, кажется, что слишком немногие это читали.

...