Я пытаюсь создать прокси, который будет обслуживать запросы к внутреннему сайту (скрывая источник), но в то же время проверять пакеты и асинхронно обрабатывать их.
например. скажем, все вызовы 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 - Bad Gateway The
Тайм-аут операции
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 = "Время операции
из "
Теперь подобные посты в сети не помогли, так как это не ошибка тайм-аута (у прокси есть настройка 120 секунд, ответы на страницы менее 100 мс), и в тот момент, когда я комментирую код обработчика, который пытается читать данные FORM или InputStream, все работает как чудо.
Даже если я установлю позицию входного потока на 0 после прочтения, я все равно получу тайм-ауты.
Если я читаю поток ввода в EndRequest, он получает 0 байтов, даже если это был запрос POST. (что явно не так)
Есть ли в ARR ошибка в том, что я пытаюсь прочитать поток ввода, прежде чем он попытается перенаправить его?
Вещи, используемые: Windows Server 2008 R2
IIS 7.5 ARR v2 .Net Framework 3.5
модуль
Идеи?
Спасибо
/ Космин