Azure Cloud Service (Classic) получение IP-адреса клиента - PullRequest
0 голосов
/ 20 мая 2019

Я прочитал множество постов, блогов, вопросов и ответов по этому вопросу, поэтому я уверен, что это не простое стандартное решение.

Я запускаю веб-сервис в стиле 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*

Как этого достичь ??

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Спасибо всем, кто посмотрел на это, и Олегу за его попытки.Потребовалось много копаться с удаленными отладчиками, работающими в развертывании Azure, но в конце концов я обнаружил проблему.

У нас есть веб-сервис .asmx старого стиля с сервисом WCF перед ним с различными «инспекторами» и«маршрутизаторы».Это все довольно уродливо, но работает долгое время (как, я уверен, многие системы делают!).Ведение журнала адреса удаленного клиента в течение некоторого времени было прервано, но в последнее время необходимость его повторной работы снова стала более важной.

Проблема связана с поведением стека WCF и тем, как они работают с заголовками HTTP.в отличие от заголовков SOAP.У нас было изменение версии в спецификации Soap, которое некоторое время назад нарушало работу системы, но это было исправлено путем установки SoapProcessingEnabled для поведения маршрутизации в значение true, которое по существу удаляет все заголовки http и позволяет взаимодействовать несовместимым службам Soap.

Мои попытки установить заголовок конкретно в другом поведении не увенчались успехом из-за проблемы с выполнением заказа.

С нетерпением жду возможности отбросить весь стек asmx / wcf и начать заново, но не могу оправдать месяцы времени разработки!Еще раз спасибо за помощь

0 голосов
/ 20 мая 2019

Не могли бы вы проверить?

     var Request = HttpContext.Current.Request; 
     string IP = Request.Params["HTTP_CLIENT_IP"] ??
     Request.Headers["CF-CONNECTING-IP"].ToString() ??
     Request.Headers["Forwarded"] ??
     Request.UserHostAddress; 

Другой подход для собственного хоста owin:

 if (Request.Properties.ContainsKey("MS_OwinContext"))
    {
    dynamic owinContext = Request.Properties["MS_OwinContext"];
    return owinContext.Request.RemoteIpAddress;
    }

Также он может быть включен в параметрах сервера Azure https://totaluptime.com/kb/getting-the-original-client-ip-with-x-forwarded-for-in-your-code/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...