Маршрутизация запросов приложений IIS7 (обратный прокси-сервер) в сочетании с управляемым модулем - время ожидания

Я пытаюсь создать прокси-сервер, который будет обслуживать запросы к внутреннему сайту (скрывая источник), но в то же время проверять пакеты и асинхронно их обрабатывать.

Например, предположим, что все вызовы SOAP на http://www.foo.com пойдут на http://192.168.1.1 , и в то же время будут сохранены в БД для публикации анализ. Внутренний сервер - это черный ящик, поэтому изменение чего-либо на нем выходит за рамки этого вопроса.

В любом случае, я настроил ARR, с обратным прокси, сделан фильтр перезаписи URL с подстановочными знаками, все работает безупречно. Затем я попытался добавить управляемый HttpModule, написанный на C #, и подключился к Application_BeginRequest и Application_EndRequest. Я могу получить доступ к заголовкам запросов, заголовкам ответов на конечный запрос (пул приложений находится в интегрированном режиме) и даже могу читать содержимое ответа из потока вывода, установив фильтр на Response.Filter, который кэширует все записи в дополнительном потоке памяти.

Проблема в том, что в тот момент, когда я пытаюсь прочитать (внутри обработчика модуля BeginRequest) входной поток из запроса, ARR остается некоторое время и выдает ошибку HTTP

502.3 - Плохой шлюз и подключился к Application_BeginRequest и Application_EndRequest. Я могу получить доступ к заголовкам запросов, заголовкам ответов на конечный запрос (пул приложений находится в интегрированном режиме) и даже могу читать содержимое ответа из выходного потока, установив фильтр Response.Filter, который кэширует все записи в дополнительном потоке памяти.

Проблема в том, что в тот момент, когда я пытаюсь прочитать (внутри обработчика модуля BeginRequest) входной поток из запроса, ARR остается некоторое время и выдает ошибку HTTP

502.3 - Плохой шлюз и подключился к Application_BeginRequest и Application_EndRequest. Я могу получить доступ к заголовкам запросов, заголовкам ответов на конечный запрос (пул приложений находится в интегрированном режиме) и даже могу читать содержимое ответа из выходного потока, установив фильтр Response.Filter, который кэширует все записи в дополнительном потоке памяти.

Проблема в том, что в тот момент, когда я пытаюсь прочитать (внутри обработчика модуля BeginRequest) входной поток из запроса, ARR остается некоторое время и выдает ошибку HTTP

502.3 - Плохой шлюз время ожидания операции истекло Обработчик ApplicationRequestRoutingHandler Код ошибки 0x80072ee2

Время истекло.

Просмотр с отслеживанием неудачных запросов, я вижу:

MODULE_SET_RESPONSE_ERROR_STATUS Предупреждение ModuleName = "ApplicationRequestRouting", Уведомление = "EXECUTE_REQUEST_HANDLER", HttpStatus = "502", HttpReason = "Плохо Шлюз ", HttpSubStatus =" 3 ", ErrorCode = "2147954402", ConfigExceptionInfo = "" SET_RESPONSE_ERROR_DESCRIPTION Предупреждение ErrorDescription = "Операция рассчитана по времени out "

Теперь любые похожие сообщения в сети не помогли, поскольку это не ошибка тайм-аута (прокси-сервер имеет настройку 120 секунд, ответы страницы менее 100 мс), и в тот момент, когда я комментирую код обработчика, который пытается прочитать данные FORM или данные InputStream, все работает как чудо.

Даже если я установил позицию входящего потока на 0 после его чтения, я все равно получаю таймауты. Если я читаю входной поток на EndRequest, он получает 0 байтов, даже если это был запрос POST. (что явно неверно)

Есть ли в ARR ошибка в том, что я пытаюсь прочитать входной поток, прежде чем он попытается перенаправить его?

Используемые вещи: Windows Server 2008 R2 IIS 7.5 ARR v2 .Net Framework 3.5 модуль

Идеи? Спасибо / Cosmin

12
задан Stecya 29 March 2011 в 19:12
поделиться