2012-03-11 34 views
11

Używamy IIS7 do hostowania aplikacji internetowej asp.net. W tym środowisku administratorzy i programiści mogą regularnie wdrażać kod aplikacji.Pula aplikacji IIS/Restart i ASP.NET

Nowy kod lub aplikacja przechodzi jako DLL do folderu bin ASP.NET. Po wdrożeniu nowej biblioteki DLL IIS ponownie uruchamia proces, wpływając (spowalniając) wszystkich użytkowników online.

Czy istnieje sposób na skonfigurowanie usług IIS tak, aby uruchamiał proces w tle, a gdy będzie gotowy, przejście z poprzedniego stanu do nowego bez wpływu na użytkowników ?!

Z góry dziękujemy za opinię!

Odpowiedz

26

Usługi IIS już to robią, na tym polega recykling. IT ładuje biblioteki DLL, podczas gdy stara wersja aplikacji wciąż działa. dopiero po zakończeniu recyklingu jest gotowy.

Jednak ładuje DLL jest tylko częścią coraz aplikacji internetowych gotowe, nie może być również początkowe ładunki, takie jak załadunek/buforowanie użytkownikowi db itp
Działania te nie są częścią procesu obiegowego, oni się zdarzyć po przeładowaniu wszystkich bibliotek DLL i zakończeniu recyklingu.

Jakiś czas temu natknąłem się na ten problem z aplikacją, która miała ogromny czas uruchamiania z powodu dużej aktywności db/buforowania podczas uruchamiania. Byłem więc zainteresowany, czy jest jakaś funkcjonalność, która pozwala nam na wykonanie kodu, zanim recykling zostanie oznaczony jako zakończony, tak więc aplikacja jest najpierw uważana za poddaną recyklingowi, kiedy wszystko jest gotowe do uruchomienia. Zasadniczo to, czego chciałem, to pewien rodzaj funkcjonalności etapowej.
Byłem w kontakcie z zespołem IIS w związku z tym problemem, niestety powiedzieli mi, że taka funkcjonalność nie istnieje, ani nie jest planowana.

Aby to zrobić, możesz spróbować rozwiązać następujący:

  • Zastosowanie zmiennego wdraża:
    możliwość konfiguracji 2 stron z odrębnych pul aplikacji. Jednym z nich jest strona internetowa LIVE, druga to strona STAGED. Jeśli chcesz wdrożyć zmiany, po prostu wdrożyć na stronie internetowej STAGED. Po załadowaniu/buforowaniu itp. Zmieniasz ustawienia adresów URL aplikacji internetowych, aby przekierowywać przychodzące żądania z LIVE na STAGED. Tak więc LIVE jeden staje się nowy STAGED i na odwrót. Następna instalacja zostanie ponownie przeniesiona do nowego STAGED i tak dalej.

UPDATE
Widocznie oni stworzyli moduł IIS, który zapewnia tę funkcjonalność już:

IIS Application Warm-Up modułu dla IIS 7.5

Zespół IIS wydała pierwsza beta-testowa wersja modułu rozgrzewania aplikacji dla IIS 7.5. Dzięki temu rozgrzewanie aplikacji jest jeszcze łatwiejsze niż opisano wcześniej. Zamiast wpisywać niestandardowy kod , należy określić adresy URL zasobów do wykonania, zanim aplikacja internetowa zaakceptuje żądania z sieci.Ta rozgrzewka występuje podczas uruchamiania usługi IIS (jeśli skonfigurowano pulę aplikacji IIS jako funkcję AlwaysRunning) i gdy przetwarza proces roboczy IIS . Podczas recyklingu stary proces roboczy IIS kontynuuje wykonywanie żądań do momentu, aż nowo utworzony proces roboczy zostanie w pełni rozgrzany, tak aby aplikacje nie doświadczyły przerw ani innych problemów związanych z niepoprawionymi pamięciami podręcznymi. Zauważ, że ten moduł działa z każdą wersją ASP.NET , począwszy od wersji 2.0.

Aby uzyskać więcej informacji, zobacz Rozgrzewka aplikacji na stronie internetowej IIS.net. Aby zapoznać się z instrukcją, która ilustruje, jak korzystać z funkcji rozgrzewki, zobacz Pierwsze kroki z modułem rozgrzewającym aplikacje IIS 7.5 na stronie internetowej IIS.net.

Patrz:

http://www.asp.net/whitepapers/aspnet4

Jeśli używasz ASP.NET 4 Auto Start cecha:

Nadal można wybrać auto-recykling procesy robocze z czas do czas. Gdy to zrobisz, aplikacja natychmiast się zrestartuje i Twój kod rozgrzewki zostanie wykonany (inaczej niż dzisiaj - gdzie musisz czekać dla następnego żądania to zrobić).

Główna różnica między funkcją rozgrzewania i automatycznego uruchamiania polega na tym, że moduł rozgrzewania jest częścią procesu recyklingu. Zamiast blokować aplikację dla żądań, podczas uruchamiania kodu inicjującego.
Jedyną rzeczą, którą można uzyskać za pomocą funkcji automatycznego uruchamiania, jest to, że nie trzeba czekać na użytkownika, aby uderzył w stronę, co nie pomaga w przypadku.

zobaczyć Gu blogu:

http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

UPDATE 2:

Niestety moduł Warmup zostało przerwane na IIS 7/7.5:

http://forums.iis.net/t/1176740.aspx

To będzie częścią IIS8 choć (jest to teraz nazywa Application inicjalizacji modułu):

http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx

UPDATE 3:

Jak zauważył w komentarzach Moduł Warmup został ponownie udostępniony dla IIS 7.5 jako Moduł Inicjalizacji Aplikacji dla IIS 7.5 po IIS 8 został wydany:

http://www.iis.net/downloads/microsoft/application-initialization

+0

Bardzo dziękuję za komentarze, wnoszę, że muszę przenieść pamięć podręczną i napięcie wstępne działania w trybie pozaprocesowym, w którym mogę wyładować część pracy inicjującej aplikacji i zaimplementować "auto-start" d wreszcie poczekaj na IIS8 :) – sam360

+1

Moduł rozgrzewki nadal istnieje dla IIS 7.5, ponieważ _ Moduł Inicjalizacji aplikacji dla IIS 7.5_: http://www.iis.net/downloads/microsoft/application-initialization – NicolasF

5

Pierwsza część ntziolis answer jest odrobinę niedokładne. Proces roboczy nie jest poddawany recyklingowi ani ponownie uruchamiany, po prostu działa. W takim przypadku, w środowiskach puli współużytkowanych witryny byłyby usuwane za każdym razem, gdy został wdrożony nowy.

Po wdrożeniu nowej aplikacji ASP.NET jest to "Domena aplikacji" witryny w ramach proces roboczy zostanie przerwany, a nie proces puli.

w recyklingu puli dodatek jest całkowicie odrębny koncepcja rozmieszczenia

W tym momencie w życiu handlowym ASP.NET podczas wdrażania, strona będzie w stanie niespójnym, aż wszystkie strony jest wdrożony. W tej chwili nie ma dobrej opowieści od firmy Microsoft dotyczącej pojedynczej witryny na serwerach z jednym serwerem.

Dlatego ASP.NET ma specjalną stronę App_Offline.htm. Jest tam, więc możesz włączyć tę stronę, wdrożyć, a następnie wyłączyć.

Druga część ntziolis answer jest prawie poprawna, ale nie potrzebujesz dwóch witryn ani dwóch pul aplikacji. Potrzebne są tylko dwa foldery systemu plików, które przełączają się między fizycznymi folderami dla witryny ... jeśli jesteś na jednym serwerze, a nie na platformie równoważenia obciążenia lub ARR.

Jeśli twoje witryny znajdowały się na serwerze sieciowym za równoważeniem obciążenia lub ARR, posiadanie dwóch różnych witryn miałoby sens, możesz kierować żądania z jednej witryny do drugiej i za każdym razem przy każdym uruchomieniu.

Oczywiście, jeśli istnieje duża ilość treści generowanych przez użytkowników (przesłane pliki itp.), Wówczas zmapuj katalog wirtualny w swojej witrynie do wspólnej lokalizacji dla tych danych.

W przypadku wdrożeń na większą skalę, na których aplikacja działa (na przykład) w środowisku o zrównoważonym obciążeniu, można wykonywać bardziej zaawansowane wdrożenia.

Dla powiązanych pytań proszę zobaczyć:

How Do I deploy an application to IIS while that web application is running

Publishing/uploading new DLL to IIS: website goes down whilst uploading

Is smooth deployment possible with componentized ASP.NET MVC apps?

+0

mógł być bardziej precyzyjny w pierwszej części przeplatał się z wdrożeniem + recykling po ponownym przeczytaniu;). Myślę jednak, że jego problemem jest kosztowny kod startowy aplikacji, a nie faktyczne wdrożenie, dlatego skupiłem się na braku modułu rozgrzewki przed IIS 8 – ntziolis

Powiązane problemy