Я пытаюсь обслужить простое прокси-приложение для веб-службы. Для этого у меня есть обработчик HTTP, который передает любой запрос моего веб-сайта другому веб-сайту, настроенному в файле web.config. Прокси протестирован локально и работает отлично. Я тестировал его на VS 2012 с использованием IIS Express и на нашем локальном сервере, на котором работает Windows Server 2008 R2 и IIS 7.5.
Сейчас я несколько дней пытаюсь установить это приложение на наш сервер развертывания, но безуспешно. Каждый раз, когда я пытаюсь получить доступ к приложению, оно игнорирует тот факт, что я зарегистрировал обработчик в web.config, а обработчик StaticFile вместо этого перехватывает запрос. Похоже, что он игнорирует мою регистрацию обработчика.
Я уже пробовал очистить ВСЕ обработчики в моем приложении и оставить только созданный мной HttpProxy, но он по-прежнему вызывает StaticFile.
Вот что самое забавное. Случайно я успешно настроил обработчик прокси на корневом узле IIS. С тех пор обработчик работал с моим приложением, но он также нарушал работу всех других приложений на сервере, поскольку он захватывает все запросы, и у них не была установлена DLL обработчика. Таким образом, он работает, когда он унаследован, но не работает, когда я настраиваю его локально.
Вот мой раздел web.config webServer:
<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.
Если на корневом веб-сайте есть файл 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>
Теперь вы все еще можете столкнуться с проблемой, если у вас есть какие-либо другие Httphandler, определенные в узле system.web в корневой конфигурации, поэтому вы можете очистить это в своей дочерней конфигурации:
<system.web>
<httpHandlers>
<clear />
</httpHandlers>
</system.web>