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>
Другие вопросы по тегам