IIS 7.5, игнорирующий локальные обработчики HTTP
Я пытаюсь обслуживать простое прокси-приложение для веб-службы. Для этой цели у меня есть HTTP-обработчик, который передает любой запрос на мой веб-сайт на другой веб-сайт, настроенный в файле web.config. Прокси был протестирован локально и работает отлично. Я проверил его на VS 2012 с помощью IIS Express и на нашем локальном сервере, который работает под управлением Windows Server 2008 R2 и IIS 7.5.
Сейчас я несколько дней пытаюсь установить это приложение на наш сервер развертывания, но безрезультатно. Каждый раз, когда я пытаюсь получить доступ к приложению, оно игнорирует тот факт, что я зарегистрировал обработчик в web.config, и обработчик StaticFile вместо этого перехватывает запрос. Похоже, это игнорирует мою регистрацию обработчика.
Я уже пытался очистить ВСЕ обработчики в моем приложении и оставить только HttpProxy, который я сделал, но он по-прежнему вызывает StaticFile.
Вот забавная часть. Случайно я успешно настроил обработчик прокси на корневом узле IIS. С тех пор обработчик работал на моем приложении, но он также ломал все другие приложения на сервере, так как он захватывал все запросы, и у них не было установленной DLL-библиотеки обработчика. Так что он работает, когда он наследуется, но не работает, когда я настраиваю его локально.
Вот раздел webServer моего web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="ProxyHttpHandler"
path="*"
verb="*"
type="DDProxy.ProxyHttpHandler, DDProxy"
resourceType="Unspecified"
/>
</handlers>
</system.webServer>
По сути, я в замешательстве, потому что кажется, что IIS игнорирует конфигурации, которые я передаю именно этому приложению. Есть идеи?
РЕДАКТИРОВАТЬ: Небольшое развитие здесь. Кажется, что когда я редактирую applicationhost.config, конфигурации передаются приложению (даже когда я использую "местоположение", чтобы указать мое приложение). Тем не менее, когда я передаю конфигурацию в web.config, мне не везет. Попробовал это с помощью DirectoryListing.
1 ответ
Если на корневом веб-сайте есть файл web.config с определенными обработчиками http или другими узлами system.webserver, то приложение, которое находится под вами, может наследовать свою конфигурацию от корневого приложения.
Вы можете попробовать заблокировать наследование в корневой конфигурации для расположения обработчика http:
<location path="." inheritInChildApplications="false">
<system.webServer>
...
</system.webServer>
</location>
Или используя в дочернем конфиге так:
<system.webServer>
<clear/>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="ProxyHttpHandler"
path="*"
verb="*"
type="DDProxy.ProxyHttpHandler, DDProxy"
resourceType="Unspecified"
/>
</handlers>
</system.webServer>
Теперь вы все еще можете столкнуться с проблемой, если у вас есть другие Httphandlers, определенные в узле system.web в корневой конфигурации, так что вы можете решить эту проблему в своей дочерней конфигурации:
<system.web>
<httpHandlers>
<clear />
</httpHandlers>
</system.web>