Подтвердить что ты не робот

HttpModule не работает с Visual Studio

Я использую 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 в любом случае.)

4b9b3361

Ответ 1

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

<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

Если вы работаете в 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 выйдет из строя, если вы дадите ему местоположение Кассини.
Cassini выйдет из строя, если вы укажете местоположение 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 не знает, что делает правая рука Кассини, и они оба прикрутили ее.

Ответ 3

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