2011-07-14 9 views
8

właśnie czytając ten post "When is IHttpModule.Dispose method called?" Znalazłem toPytanie dotyczące IHttpModule.Dispose i Application_End

„Metoda utylizować wykonuje żadnej ostatecznej prac porządkowych przed usunięciem modułu z rurociągu wykonania.”

co oznaczałoby, że jest aplikacją.

Jest OK. W każdym razie, próbując osobiście, odkryłem, że używanie metody IHttpModule Dispose i programu obsługi zdarzeń dla zdarzenia Application.Disposed powinno być prawie takie samo. Pierwszy występuje zaraz po drugim.

Nie wydaje mi się, że jest to poprawne w 100%, tzn. Po IHttpModule.Dispose nie zawsze następuje pozycja Application_End. Załóżmy, że mam wiele wystąpień obiektu Application uruchomionego dla mojej aplikacji, co oznacza, że ​​każda instancja obiektu aplikacji będzie zawierała poszczególne instancje modułów. Przyjmijmy teraz, że nadejdzie pora, gdy Pula aplikacji zostanie pełna z instancjami aplikacji, co się wtedy stanie? Czy nie będzie początkowo usuwać instancji aplikacji jeden po drugim, a w łańcuchu moduły w instancji aplikacji zostaną usunięte. Teraz ta likwidacja modułu nie oznacza, że ​​Application_End będzie strzelał po tym. Aplikacja wciąż działa. Czy mam rację?

Odpowiedz

8

Tak.

HttpModules są za HttpApplication. Wbrew temu, co sugeruje jej nazwa, metoda Application_End w pliku global.asax NIE jest uruchamiana na końcu każdego okresu życia HttpApplicaton. Jest uruchamiany po zakończeniu okresu istnienia wszystkich HttpApplications w bieżącym AppDomain (kiedy AppDomain zostanie zburzony). To samo dotyczy metody Application_Start.

+0

dzięki za odpowiedź! Jeszcze jedno ... czy to prawda, że ​​gdy pula aplikacji jest pełna z instancjami obiektów aplikacji, zacznie je czyścić? lub pula aplikacji zostanie ponownie uruchomiona? –

+1

Zależy od tego, jak czuje się IIS w dniu pytania. :) .... Jeśli proces roboczy trafi w stan recyklingu (zgodnie z właściwościami puli aplikacji w konfiguracji IIS), cały proces zostanie zrestartowany i pojawi się nowy pakiet w3wp. Bardziej prawdopodobne jest jednak, że podczas normalnego użytkowania (ponieważ restartowanie całej puli aplikacji jest drogie), pula aplikacji utworzy i usunie wystąpienia HttpApplication. Zgodnie z konfiguracją usługi IIS mogą również hostować wiele domen aplikacji w jednym procesie roboczym puli aplikacji, a także mogą tworzyć ogród sieci obejmujący wiele procesów związanych z kolejnością, uruchomionych w tym samym czasie dla puli aplikacji. – Jeff

+0

Dlaczego ktoś zgodził się z tą odpowiedzią? – Jeff

0

Istnieje tylko 1 wystąpienie obiektu aplikacji na aplikację. istnieje wiele obiektów sesji, z których każda zajmuje się prośbami lub czeka na ponowne przetworzenie.

Pula aplikacji nie będzie pełna obiektów aplikacji, ponieważ jest tylko 1 na aplikację. Gdy pula aplikacji hostuje więcej niż 1 aplikację, będzie ich wiele i recykling spowoduje ich zabicie. Pule aplikacji mają również monitorowanie stanu zdrowia, które wznawia proces po określonej ilości żądań/użycia pamięci. w takim przypadku istniejące sesje pozostawia się na śmierć, podczas gdy nowa aplikacja jest uruchamiana w celu obsługi nowych żądań. gdy wszystkie sesje w starej aplikacji są martwe, aplikacja jest zerwana.

Aby uzyskać więcej informacji, patrz MSDN.

Powiązane problemy