Звоните ASP.NET веб-служба в той же ферме, что и веб-приложение


Я получаю следующую ошибку, когда пытаюсь вызвать ASP.NET веб-сервис от an ASP.NET веб-приложение. Я считаю, что это потому, что веб-служба и веб-приложение находятся в одной ферме/за одним и тем же балансировщиком нагрузки.

A connection attempt failed because the connected party did not properly
respond after a period of time, or established connection failed because
connected host has failed to respond [IP Address removed]:80
Эта ошибка не возникает при вызове веб-службы на ферме из веб-приложения на локальном компьютере или при вызове веб-службы на локальном компьютере из веб-приложения на ферме.

Есть идеи, почему происходит эта ошибка?

3 2

3 ответа:

Решение моей проблемы состояло в том, чтобы включить NATing на балансировщике нагрузки.

Запрос был сделан с сервера в ферме к балансировщику нагрузки, затем балансировщик нагрузки отправит этот запрос на один из серверов в ферме (возможно, даже на тот же сервер, который запросил его). Проблема состояла в том, что сервер, обрабатывающий запрос, пытался бы отправить ответ непосредственно обратно "запрашивающему клиенту", а не обратно в балансировщик нагрузки, поэтому сервер, который сделал запрос, должен был ответить на него. запрос просто проигнорирует ответ, потому что он не был отправлен балансировщиком нагрузки. При включении NATing все ответы отправляются обратно в подсистему балансировки нагрузки, а затем подсистема балансировки нагрузки отправляет ответ исходному клиенту.

Это только предположение, но может ли веб-сервер действительно видеть используемый IP-адрес? Если он находится на ферме за балансировщиком нагрузки, то этот IP-адрес может быть заблокирован самим балансировщиком нагрузки или брандмауэром или прокси-сервером.

Можно ли получить доступ к веб-серверу через удаленный рабочий стол и ping IP-адрес?

Стек TCP/IP на узле фермы не будет перенаправлять вызов на IP-адрес балансировщика нагрузки, но автоматически преобразует его в локальный вызов на 127.0.0.1:80 на конкретном узле фермы, который выполняет вызов. Убедитесь, что ваши веб-серверы настроены для обработки этого дела.