Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł ułatwia obejście problemu występującego podczas próby dodania zarządzanego modułu lub procedury obsługi do witryny internetowej lub konfiguracji aplikacji internetowej za pośrednictwem Menedżera usług Internet Information Services (IIS).
Oryginalna wersja produktu: Internet Information Services 8.0, Internet Information Services 8.5
Oryginalny numer KB: 3194551
Symptomy
Rozważmy następujący scenariusz:
Chcesz dodać program obsługi zarządzanej lub moduł zarządzany do konfiguracji jednej z witryn internetowych usług IIS lub aplikacji internetowych na serwerze internetowym usług IIS.
W tym celu wybierz docelową witrynę internetową lub aplikację internetową w konsoli Menedżera usług IIS, kliknij ikonę Mapowania programu obsługi lub Mapowania modułów, a następnie kliknij łącza Dodaj program obsługi zarządzanej lub Dodaj moduł zarządzany w okienku po prawej stronie konsoli.
Jeśli na serwerze jest uruchomiony 64-bitowy system operacyjny, a zestaw .NET zawierający zarządzaną procedurę obsługi lub implementację modułu zarządzanego, którą próbujesz dodać do listy programów obsługi lub modułów, jest zestawem skompilowanym w środowiskach docelowych tylko 32-bitowych, zostanie wyświetlony następujący komunikat o błędzie z konsoli Menedżera usług IIS:
Wystąpił błąd podczas wykonywania tej operacji
Szczegóły: tej metody nie można wywołać podczas fazy inicjowania przed rozpoczęciem aplikacji
Przyczyna
Podczas próby dodania zarządzanego programu obsługi lub modułu zarządzanego konsola Menedżera usług IIS tworzy listę wszystkich klas znajdujących się w zestawach platformy .NET pochodzących z /bin folderu aplikacji i ich zależności. Ponadto na tej liście znajdują się inne . Zestawy odwołujące się do platformy NET. Usługi IIS umożliwiają określenie, które z tych rozwiązań implementuje interfejsy IHttpHandler lub IHttpModule, w zależności od tego, czy masz do czynienia z procedurami obsługi, czy modułami. Aby sprawdzić wszystkie klasy ze wszystkich zestawów pochodzących z /bin folderu aplikacji, konsola Menedżera usług IIS tworzy podrzędną domenę aplikacji .NET wewnątrz procesu inetmgr.exe, w którym te klasy zostaną załadowane i sprawdzone pod kątem implementacji wyżej wymienionych interfejsów.
Zwykle zestaw .NET jest kompilowany w dół do języka pośredniczącego firmy Microsoft (MSIL) i jest przeznaczony do neutralności platformy (co oznacza, że może działać zarówno na platformach 64-bitowych, jak i 32-bitowych). Zestaw .NET można skompilować do platform docelowych tylko 32-bitowych lub tylko platform 64-bitowych. W tym przypadku MSIL jest dodatkowo kompilowany do kodu natywnego specyficznego dla zestawu instrukcji procesora tej platformy. W takim przypadku zestaw nie może załadować w procesie, który nie jest zgodny z docelową bitowością kompilacji: próba załadowania zestawu przeznaczonego dla platformy 64-bitowej wewnątrz procesu 32-bitowego zwraca błąd.
Ponieważ konsola Menedżera usług IIS działa wewnątrz 64-bitowego procesu w wersji systemu Windows, która jest 64-bitowa (domyślnie), podrzędna domena aplikacji .NET zostanie utworzona w procesie 64-bitowym. Nie ma możliwości, aby konsola menedżera usług IIS wiedziała, że niektóre zestawy .NET, które znajdują się w folderze /bin aplikacji, są kompilowane w celu kierowania tylko platform 32-bitowych, gdy próbuje załadować je do wykonania zmian konfiguracji. Jeśli napotkano zestaw przeznaczony dla platformy 32-bitowej, ładowanie zestawów w podrzędnej domenie aplikacji .NET wewnątrz procesu inetmgr.exe zostanie zatrzymane, a błąd opisany w sekcji Objawy jest wyświetlany w konsoli usług IIS.
To zachowanie jest celowe, ponieważ konsola Menedżera usług IIS nie może określić docelowej bitowości zestawów platformy .NET dla aplikacji. W związku z tym zakłada się, że wszystkie zestawy są kompilowane w dół do MSIL i są niezależne od platformy, które mogą działać zarówno w 32-bitowych, jak i 64-bitowych wersjach systemu Windows.
Rozwiązanie
Aby obejść ten problem, dopasuj bitność procesu inetmgr.exe do bitowości zestawu docelowego, który musi zostać załadowany wewnątrz podrzędnej domeny aplikacji .NET. Aby to zrobić w 64-bitowej wersji systemu Windows, uruchom następujący wiersz polecenia z wiersza polecenia z podwyższonym poziomem uprawnień:
mmc.exe /32 iis.msc
Spowoduje to załadowanie programu Microsoft Management Console (MMC) w trybie 32-bitowym, a także załadowanie przystawki konsoli Menedżera usług IIS do konsoli MMC. Ponieważ konsola usług IIS jest teraz uruchomiona w procesie 32-bitowym, domena aplikacji podrzędnej platformy .NET jest tworzona w procesie 32-bitowym, który będzie zgodny z docelową bitowością zestawu, który próbujesz skonfigurować jako program obsługi zarządzanej lub moduł zarządzany.
Kroki odtwarzania
Utwórz klasę, która implementuje
IHttpModulelubIHttpHandlernastępnie kompiluje projekt biblioteki klas z programu Visual Studio do docelowych platform 32-bitowych (Platform Target: x86 w ustawieniach kompilacji projektu).Weź wynikowy zestaw .NET i wdróż go w folderze bin istniejącej aplikacji internetowej lub witryny internetowej w 64-bitowym systemie operacyjnym z uruchomionymi również usługami IIS.
Przejdź do menedżera usług IIS i spróbuj dodać program obsługi zarządzanej lub moduł zarządzany za pośrednictwem interfejsu i zostanie wyświetlony błąd.