HttpModule не работает с Visual Studio - PullRequest
18 голосов
/ 08 июня 2009

Я использую HttpModule для сокращения URL на моем сайте. Я использую Visual Studio 2008 и IIS 7, а также .Net 3.5.

Если модуль указан в system.webServer элемента web.config и сайт запущен в IIS, он работает нормально. Конфиг выглядит так:

<system.webServer>
        <modules>
            <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
        </modules>...

Мой модуль присоединяется к событию BeginRequest, все работает. Однако я не могу заставить его работать, используя встроенный веб-сервер VS (Cassini). Я попытался переместить конфигурацию модуля в элемент system.web в web.config, но не повезло. Я поставил точку останова, ничего не происходит.

Есть мысли о том, почему это может быть проблемой?

(Я также попробовал событие Application_BeginRequest в global.asax. Все еще не повезло, хотя я все равно предпочел бы сохранить все в web.config.)

Ответы [ 3 ]

37 голосов
/ 08 июня 2009

Cassini, веб-сервер разработки, предоставляемый с IIS, использует синтаксис модуля IIS6, поэтому вы должны продублировать модуль add следующим образом:

<system.web>
  <httpModules>
    <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
  </httpModules>
</system.web>


<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
    <remove name="MinimizeModule" />
    <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

Обратите внимание, что я также добавил предварительное условие в настройки IIS7

2 голосов
/ 09 января 2015

Если вы работаете на IIS 7, поместите модуль в:

<configuration>
   <system.webServer>
      <modules>
         <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
      </modules>
   </system.webServer>
</configuration>

Если вы работаете на Cassini (встроенный миниатюрный веб-сервер Visual Studio), поместите модуль в:

<configuration>
   <system.web>
      <httpModules>
          <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
   </system.web>
</configuration>

Сбой IIS, если вы укажете ему местоположение Кассини.
Кассини потерпит крах, если вы укажете ему местоположение IIS.

При каждом развертывании я должен быть уверен, что не развернут web.config. я также включаю примечания в web.config:

<system.web>
   <!--The Cassini location to add modules (comment out for IIS)-->
   <httpModules>
      <!--WARNING: IIS will crash if you leave this in here.
          IISBUG: IIS doesn't support system.web/httpModules, 
          and Cassini doesn't support system.webServer/modules
      -->
      <!--Comment out for IIS-->
      <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
   </httpModules>
</system.web>

<system.webServer>
   <!--The IIS7 location to add modules (comment out for Cassini)
   <modules runAllManagedModulesForAllRequests="true">
      <!--IIS7 will crash if you present a system.web httpModules. -->
      <remove name="PerformanceHttpModule" />
      <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
   </modules>
</system.webServer>

Левая рука IIS не знает, что делает правая рука Кассини - и они оба облажались.

0 голосов
/ 08 июня 2009

Вы пытались также поместить объявление модуля в элемент? Когда я запускаю в dev с использованием Cassini, я обычно помещаю модули для их запуска.

...