2012-02-09 6 views
5

Stworzyłem małą bibliotekę klas, z modułem HttpModule, który wykorzystuje filtr do dodania html do każdej żądanej strony obsługiwanej przez IIS7.Moduł zarejestrowany w IIS7 nie działa

Testowałem to najpierw rejestrując moduł w web.config na stronie testowej i działa on tak, jak powinien, ale tylko w tej jednej aplikacji.

Wygenerowałem dll i utworzyłem silny nazwany zgromadzenie.

Muszę jakoś dodać ten zestaw jako moduł w IIS na poziomie serwera, aby działał dla wszystkich żądań, dla wszystkich aplikacji i dla treści spoza.

Do tej pory próbowałem dodać .dll jako moduł natywny. To nie działa. Znajduje się na liście rodzimych modułów, ale nie działa.

Zainstalowałem plik .dll w GAC.

Po przeczytaniu, wydaje mi się, że muszę dodać zespół jako zarządzany moduł, a następnie wybrać go z rozwijanej listy pod "Dodaj zarządzany moduł" w IIS.

Do tego, próbowałem za pomocą poleceń narzędzia appcmd, pisząc: "dodaj moduł/name: string/type: String/Warunek: ciąg"

miałem żadnych sukcesów w ten sposób, ponieważ mogę” t wymyślić, co ustawić jako typ i warunek wstępny.

Jak już przeczytałem, moduły zarejestrowane w IIS powinny działać dla wszystkich aplikacji we wszystkich witrynach i wszystkich żądaniach.

Chodzi o to, aby uniknąć konieczności rejestrowania modułu w każdym pliku web.config aplikacji.

Wszelkie pomysły?

+0

http://learn.iis.net/page.aspx/244/how-to-take-advantage-the-isis-integrated-pipeline/ –

+0

Zredagowałem moją odpowiedź z większą pomocą, jak używać polecenie appcmd. Nie dodawaj go jako modułu macierzystego, jeśli masz problemy z wierszem poleceń, użyj Menedżera usług IIS, aby dodać ** Moduł zarządzany **, kroki w mojej odpowiedzi. – Tomek

Odpowiedz

6

Po pracy z tym trochę, udało mi się sprawić, żeby działało.

Zainstalowanie zestawu w .NET 4.0 GAC nie udostępni go w menu rozwijanym w Menedżerze usług IIS w części "Dodaj zarządzany moduł".

Co miałem zrobić, to:

Tworzenie .NET 4.0 Class Library i skompilować go jako silnego nazwie zespołu

zainstalować go w .net 4.0 GAC za pomocą gacutil znajdujący się w Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ bin \ NETFX 4,0 Narzędzia

(lub uczynić Visual Studio kompilacji, podpisać i automatycznie zainstalować zespół)

Dodaj tę linię pod <modules> w applicationHost. config: (to h jak być wykonywane ręcznie, nie można zrobić w menedżerze)

<add name="MyName" type="NameSpace.ClassName" preCondition="managedHandler,runtimeVersionv4.0" /> 

To sprawia, że ​​przebieg modułu w sprawie wniosków o terenach w .NET to pojawia 4.

jednak, że żąda się strony opracowane w wersjach pre .net 4 nie mogą korzystać z modułu utworzonego w .net 4.0. Jeśli więc poprosisz o strony w witrynie utworzonej w .net 3.5, moduł nie będzie działał.

Kolejna obserwacja:

Po dodaniu modułu do IIS za pomocą pliku ApplicationHost.config, jeśli otworzyć Menedżer usług IIS podświetlić nazwa_serwera w połączeniach i kliknij modułów. Zobaczysz moduł .net 4 na liście.

Kliknij dwukrotnie, a zobaczysz ustawienia dla niego. Zobaczysz, że "Invoke only for requests to ASP.Aplikacje NET lub kontrolery zarządzane są zaznaczone. Jeśli odznaczysz je i naciśniesz OK, pojawi się błąd informujący, że zespół nie został zainstalowany w GAC. Z powodzeniem w .net 4 GAC? I nie widzę po prostu modułu uruchomione w żądaniu?

Jeśli mimo wszystko i tak zapiszesz ustawienia, pojawi się błąd runtime i jeśli spojrzysz w applicationHost.config , zobaczysz, że wcześniej ręcznie dodane ustawienia modułu uległy zmianie

Ale co jeśli chcę "wywoływać tylko dla żądań aplikacji ASP.NET lub zarządzanych uchwytów?

+0

Dzięki, Soeren, bardzo mi pomogło odczytać twoje pytanie i odpowiedzi, które sam tutaj umieściłeś. Mam pytanie dotyczące kolejnych kroków. Jak umieścić plik konfiguracyjny dla swojego modułu? (ponieważ działa bez konkretnej aplikacji). Chodzi mi o to, jaki jest standardowy sposób na umieszczenie jakiegoś pliku konfiguracyjnego dla takiego modułu na poziomie serwera? – Bakhshi

+0

Witaj, wydaje mi się przydatny, ale gdzie jest ten plik applicationHost.config, o którym mówisz ... Mam także do czynienia z podobnym problemem ... – SutharMonil

2

Musisz dodać moduł na poziomie serwera. Można to zrobić z wiersza poleceń:

appcmd add module /name:string /type:string /preCondition:string 

Aby uzyskać wiersz poleceń pomaga wykonać: appcmd add module /?
Krótko mówiąc, musi wyglądać następująco:

appcmd add module /name:AnyNameOfYourChoice /type:YourClassNameSpace.YourClassName 

/preContition parametr jest opcjonalny.

Więcej szczegółów here.

LUB

zrobić z Menedżera IIS przechodząc do węzła serwera -> Moduły -> Dodaj
Więcej szczegółów here zarządzanych modułu. (na dole strony)

+0

Dzięki. Jak już zauważyłeś, kilka razy edytowałem moje pytanie, ponieważ chciałem być jak najbardziej konkretny. Wypróbuję Twoje sugestie i wrócę. – Soeren

+0

Zespół jest teraz dodawany jako zarządzany moduł, a teraz pojawia się komunikat o błędzie "System.Web.HttpException: Could not load type ...", co sugeruje, że biblioteka dll nie zostanie znaleziona. Czy biblioteka dll musi być zlokalizowana w określonym miejscu? Skopiowałem go do folderu "inetsrv". Zespół jest również instalowany w GAC. – Soeren

+0

Czy możesz spróbować dodać go za pomocą Menedżera usług IIS? – Tomek

5

Mogę teraz uruchomić moduł na każde żądanie. Powodem, dla którego nie działało wcześniej, był całkowicie niezwiązany błąd z mojej strony. Tak, etapy, aby to działało to:

  1. napisać kod, który chcesz uruchomić na każde żądanie, jako .NET 3.5 Class Library.
  2. Skompiluj go jako zespół o silnej nazwie.
  3. Zainstaluj zespół w GAC.
  4. W menedżerze IIS7 wybierz nazwę serwera w połączeniach, kliknij opcję Moduły, a następnie kliknij opcję "Dodaj zarządzany moduł" w akcjach.
  5. wpisz nazwę modułu i wybierz nowo zainstalowany zespół z listy typów.
  6. Upewnij się, że witryna korzysta z puli aplikacji działającej w trybie zintegrowanym.

Oczywiście nie zawsze dobrze jest pozwolić, aby cały kod działał na wszystkie żądania, więc może być konieczne odfiltrowanie niektórych żądanych plików.

Jedno pytanie pozostaje jednak!

Istnieją teraz dwa GAC, Microsoft.NET dla .net 4.0 i Windows GAC dla pre .net 4.0. Ponieważ mój zestaw został utworzony w .net 3.5, został zainstalowany w systemie Windows GAC i dlatego był dostępny w menu rozwijanym Menedżera usług IIS.

Kiedy utworzyłem mój zespół w .net 4.0, został on zainstalowany w GAC Microsoft.NET, w wyniku czego nie był dostępny w liście rozwijanej w Menedżerze IIS.

Pytanie brzmi: w jaki sposób dodać zestaw .net 4.0 jako moduł zarządzany w IIS7 i czy jest on uruchamiany jak mój moduł zarządzany w wersji 3.5?

To musi być możliwe, prawda?

+0

Wersja programu IIS Manager dostarczana z usługami IIS 7 została zbudowana w .NET 3.5. W związku z tym nie można załadować niczego z .NET 4 GAC. –

Powiązane problemy