2009-06-08 19 views
18

Używam HttpModule do skracania adresów URL w mojej witrynie. Korzystam z Visual Studio 2008 i IIS 7 oraz .Net 3.5.HttpModule nie działa z Visual Studio

Po określeniu modułu w elemencie web.config, system.webServer, a witryna działa w IIS, działa poprawnie. Konfiguracja wygląda następująco:

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

Mój moduł dołącza się do zdarzenia BeginRequest, wszystko działa. Jednak nie mogę uruchomić go za pomocą wbudowanego serwera WWW VS (Cassini). Próbowałem przenieść konfigurację modułu do elementu system.web w web.config, bez powodzenia. Postawiłem na nim przełom, nic się nie dzieje.

Jakieś przemyślenia na temat tego, dlaczego tak się stało?

(próbowałem również zdarzenie Application_BeginRequest w global.asax. Wciąż nie szczęścia, choć wolałbym, aby utrzymać wszystko w pliku web.config w każdym razie).

Odpowiedz

0

Próbowałaś również wprowadzenie deklaracji modułu w elemencie ? Kiedy pracuję w dev używając Cassini, zwykle to jest miejsce, w którym muszę umieścić moduły, aby je uruchomić.

+0

Czy możesz rozwinąć to dalej? Nie jestem pewny co masz na myśli. –

37

Cassini, serwer Web Development wyposażony IIS wykorzystuje składnię modułu IIS6, więc trzeba powielać moduł dodać jak tak

<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> 

Zauważ, że Dodałem także warunek konieczny do ustawień IIS7

+0

to wygląda obiecująco, wkrótce wrócę do ciebie z wynikami ... –

+0

wypróbowałem to. Moje moduły .ektory i Init(), ale każda próba dołączenia obsługi zdarzeń jest spełniona przez PlatformNotSupportedException - wydaje się, że Cassini całkowicie ignoruje sekcję IIS7. – Hafthor

+1

Cóż, tak, Cassini ma - ty też musisz dodać składnię IIS6, więc mając tam oba – blowdart

2

Jeśli są uruchomione na IIS 7, umieścić moduł w:

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

Jeśli działa na Cassini (zintegrowany miniaturowy web-serwera Visual Studio), umieścić moduł w:

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

Usługi IIS ulegną awarii, jeśli nadasz mu lokalizację Cassini.
Cassini ulegnie awarii, jeśli nadasz mu lokalizację IIS.

Zawsze, gdy wdrażam, muszę się upewnić, że nie zostanie wdrożone web.config. Ja również zawierać notatki web.config: lewa ręka

<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 nie wie, co prawica Cassini robi - i oboje przykręcić ją.

Powiązane problemy