Я пытаюсь создать прокси-сервер, который будет обслуживать запросы на внутренний сайт (скрывая исходный код), но в то же время проверять пакеты и асинхронно обрабатывать их.
например. пусть все вызовы SOAP на http://www.foo.com перейдут на http://192.168.1.1 и в то же время сохраняться в БД для пост-анализа. Внутренний сервер является черным ящиком, поэтому изменение чего-то на нем выходит за рамки этого вопроса.
Во всяком случае, я настроил ARR с обратным прокси-сервером, переработал фильтр URL с помощью подстановочных знаков, все работает безупречно. Затем я попытался добавить управляемый HttpModule, написанный на С#, и подключиться к Application_BeginRequest и Application_EndRequest. Я могу получить доступ к заголовкам запросов, заголовкам ответов в конце запроса (пул приложений находится в интегрированном режиме) и даже способен считывать содержимое ответа из выходного потока, устанавливая фильтр в Response.Filter, который кэширует все записи в дополнительном потоке памяти.
Проблема в том, что в тот момент, когда я пытаюсь прочитать (внутри обработчика BeginRequest модуля) входной поток из запроса, ARR остается некоторое время и бросает
Ошибка HTTP 502.3 - Bad Gateway время ожидания операции ApplicationRequestRoutingHandler Код ошибки 0x80072ee2
Итак, это время.
Глядя на отслеживание неудачных запросов, я вижу:
MODULE_SET_RESPONSE_ERROR_STATUS Предупреждение ModuleName = "ApplicationRequestRouting", Уведомление = "EXECUTE_REQUEST_HANDLER", HttpStatus = "502", HttpReason = "Плохо Gateway", 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 модуль
Идеи? благодаря /Космин