Я прочитал множество постов, блогов, вопросов и ответов по этому вопросу, поэтому я уверен, что это не простое стандартное решение.
Я запускаю веб-сервис в стиле asmx в рамках веб-роли и пытаюсь получитьIP-адрес клиента.У меня запущено несколько экземпляров, что означает, что платформа предоставляет внешний IP-адрес и «балансировки нагрузки» между экземплярами.
Это все работает нормально, но получение IP-адреса клиента с помощью простых средств, таких как request.UserHostAddress
, возвращаетвнешний порт развертывания.
Другие решения, такие как ServerVariables["HTTP_X_FORWARDED_FOR"]
или ServerVariables["X_FORWARDED_FOR"]
, все возвращают ноль, и в Request.ServerVariables нет ничего, что несет информацию.
Полный список серверовпеременные, доступные в запросе:
HTTP_CONTENT_LENGTH:1584
HTTP_CONTENT_TYPE:text/xml; charset=utf-8
HTTP_ACCEPT_ENCODING:gzip, deflate
HTTP_EXPECT:100-continue
HTTP_HOST:myhost
HTTP_SOAPACTION:myaction
HTTP_REQUEST_CONTEXT:appId=cid-###################################
HTTP_REQUEST_ID:|################################
LOCAL_ADDR: *This is the private instance ip address as expected*
REMOTE_ADDR: *This is the external port of the service*
REMOTE_HOST: *This is the external port of the service*
Как этого достичь ??