Как отправить ответ на запрос веб-формы asp.net через другой сервер - PullRequest
3 голосов
/ 17 июня 2011

У меня есть два веб-сервера с публичными IP-адресами, например, Server1 с IP 111.111.111.111 и Server2 с IP 222.222.222.222.Пожалуйста, смотрите картинку:

flow diagram

Веб-форма asp.net существует на Сервер 1 .Мое намерение :

  1. Для каждого http-запроса к этой веб-форме на Сервере1 Сервер1 просто передает информацию запроса на Сервер2 для обработки логики и впоследствии Сервер2 отправляет ответ обратно клиенту (то есть обычному браузеру)

Мои вопросы:

  1. Какая информация что Server1 нужно передать на Server2, чтобы Server2 мог отправить ответ клиенту?Обратите внимание, что на сервере Server2 есть экземпляр TcpListener .Этот экземпляр TcpListener, действующий в качестве приемника для этой веб-формы, запрашивает информацию у Server1.
  2. Что такое подходящий объект (т. Е. Класс в System.Net или связанном с ним пространстве имен, таком как System.Net.Sockets)на Server2 для отправки ответа клиенту ?Подходящий здесь означает способный удовлетворить мое намерение.

Ответы [ 6 ]

2 голосов
/ 20 июня 2011

Лучшее решение этой проблемы - настроить веб-службу WCF на другом сервере.

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

Просмотрите следующие статьи на MSDN:

Веб-службы ASP.NET

ASP.NET Windows Communication Foundation в .NET

enter image description here

1 голос
/ 23 июня 2011

Хорошо, это странное решение этого странного вопроса:)

В основном я буду считать, что клиент запрашивает веб-страницу aspx как ВОПРОС , а ответ от сервера - ОТВЕТ .Из диаграммы я снова предположу, что Server2 является ОТВЕТОМ на этот ВОПРОС.

Для того, чтобы сессия вопросов и ответов работала, а также из-за поведения в Интернете, я реализую его в 2 этапа:

Шаг 1 : Клиент задает вопрос, а Сервер1 возвращает URL-адрес ответа.Этот URL будет указан на Server2.Сервер2 должен передать этот URL-адрес по локальной сети на Сервер1)

Шаг 2 : Клиент отправляет запрос на получение ответа на Сервере 2.

Таким образом, Клиент напрямую запрашивает веб-формус сервера1 и получить ответ от сервера2.Все операции инициируются Клиентом.

1 голос
/ 20 июня 2011

Если вы просто хотите переадресовать запрос, просто отправьте запрос на сервер2, вызвав второй запрос с сервера1 на сервер2.Затем вы возвращаете этот ответ как ответ server1 клиенту.Вы не можете заставить server2 общаться напрямую с клиентом, потому что клиент не подключился к server2.

Я бы использовал System.Net.HttpWebRequest и просто установил бы заголовки HTTP и тела контента на основе исходного запроса (эффективно воспроизводя точно такое же сообщениеотправляется на server1 на server2), а затем возвращает ответ от server2 клиенту.

Если вы это сделаете, вы запустите приложение, которое просто перенаправит любые запросы на server2 и, таким образом, запустит фиктивное приложение.Это приложение может быть очень простым, потому что на самом деле это немного больше, чем HTTP-прокси.

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

1 голос
/ 17 июня 2011

Ну, клиент подключен к серверу 1 через http. это нормально, но вы хотите, чтобы сервер 2 отвечал по TCP. это кажется мне маловероятным, потому что клиенты ничего не знают о сервере 2.

Возможно, вы захотите внутренне подключить ваш сервер 2 к серверу 1 по протоколу tcp, а затем вернуть ответ от сервера 1 своему клиенту. (Сервер 2 работает как сервер состояния сеанса, например)

Если вы пытаетесь сбалансировать нагрузку, это другая история. На самом деле, если вы можете сказать нам, зачем вам такая архитектура, возможно, вы получите лучшие ответы.

1 голос
/ 17 июня 2011

Нам может потребоваться дополнительная информация о вашем сценарии, но я не думаю, что Server2 может отправить ответ клиенту.

У клиента все еще есть открытый сокет, который прослушивает ответ от Server1.

Чтобы выполнить что-то подобное, вам может понадобиться добавить какой-то прокси в микс. Например, клиент отправляет прокси-сервер, который отправляет серверу 1, который отправляет серверу 2, который отправляет ответ прокси-серверу, который отправляет ответ клиенту.

Или сервер1 выступает в качестве вашего прокси.

1 голос
/ 17 июня 2011

Это звучит очень подозрительно для меня, как то, что фишер хотел бы сделать, чтобы скрыть попытку фишинга.

Вы не можете заставить другой сервер отправлять ответ непосредственно клиенту, а не тоткоторый напрямую получает запрос.Ни один клиент не примет такой ответ.

Если это допустимая операция, вам нужен прокси-сервер, который принимает запрос и пересылает ответ обратно.

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