2009-06-08 4 views
18

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

Когда модуль указан в файле 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 так или иначе.)

ответ

0

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

+0

Не могли бы вы продолжить дальше? Я не уверен, что вы имеете в виду. –

37

Кассини, веб-сервер разработки предоставляется 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

+0

это выглядит многообещающим, скоро вернется к вам с результатами ... –

+0

попробовал это. Мой модуль .ctors и Init() s, но любая попытка присоединить обработчики событий встречается с PlatformNotSupportedException. Cassini, похоже, полностью игнорирует раздел IIS7. – Hafthor

+1

Ну да, Cassini - вам тоже нужно добавить синтаксис IIS6, поэтому есть и то, и другое – blowdart

2

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

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

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