Назад | Перейти на главную страницу

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 обработчика. Таким образом, он работает, когда он унаследован, но не работает, когда я настраиваю его локально.

Вот мой раздел 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>