2011-09-12 11 views
16

Chcielibyśmy ogrzać aplikację ASP.NET MVC hostowaną na serwerze IIS 7.5. Moduł rozgrzewania, który był wcześniej dostępny pod adresem http://forums.iis.net/t/1176740.aspx, został usunięty od jakiegoś czasu.Jak rozgrzać aplikację ASP.NET MVC w IIS 7.5?

Aplikacja powinna być rozgrzana za każdym razem, gdy proces roboczy IIS lub ASP.NET zostanie ponownie uruchomiony z dowolnego powodu. Podczas okresu rozgrzewania usługi IIS powinny zwracać kod stanu HTTP oznaczający stan rozgrzewki lub niemożność obsługi klientów.

Czy utworzenie pliku wykonywalnego, który porusza się po niezbędnych stronach w witrynie za pośrednictwem HttpRequests, byłby dobrym pomysłem? Plik wykonywalny można wyzwolić z implementacji IProcessHostPreloadClient. Czy możliwe jest skonfigurowanie usług IIS tak, aby przyjmował tylko żądania z hosta lokalnego, a po wykonaniu pliku wykonywalnego może on przełączać się na wszystkich klientów - ale ten przełącznik nie powinien uruchamiać restartu usług IIS (oczywiście).

Czy można użyć programu Visual Studio 2010 - Web Performance Test do rozgrzania aplikacji zamiast tworzenia pliku wykonywalnego? Jakieś inne alternatywy?

PS: Aplikacja korzysta z uwierzytelniania za pomocą formularzy i korzysta z sesji - dlatego ważne jest zachowanie pliku cookie dotyczącego stanu i innych plików cookie.

AKTUALIZACJA 1 - W naszej aplikacji korzystamy z platformy .NET Framework 4.0 i Entity Framework (baza danych). Pierwsze trafienia do zapytań EF są powolne. Powodem rozgrzewki jest wyeliminowanie tych pierwszych trafień. Używamy już skompilowanych zapytań w większości miejsc i wprowadziliśmy wstępnie skompilowane widoki EF. Rozmiar modelu i aplikacji jest bardzo duży i złożony. Rozgrzewka wymaga przejścia przez wiele stron, aby zapewnić, że skompilowane i niezkładane kwerendy EF zostaną wykonane co najmniej raz, zanim dowolny użytkownik końcowy uzyska dostęp do aplikacji.

+0

Powiązane: http://stackoverflow.com/questions/13250679/how-to-warm-up-entity-framework-when-does-it-get-cold –

+0

Spróbuj sprawdzić [moje rozwiązanie] (http: // stackoverflow.com/questions/15348621/iis-7-5-application-initialization-for-asp-net-web-service-warmup-without-rema/15367638?noredirect=1#comment33723748_15367638). Nie zwróci specjalnego kodu statusu, ale zamiast tego oczekuje na rozgrzewkę, aby odpowiedzieć na żądania. – Jason

Odpowiedz

9

Możesz rzucić okiem na following post dla funkcji Auto-Start wbudowanej w IIS 7.5 i ASP.NET 4.0.

+0

Dziękujemy za zainteresowanie. Proszę sprawdzić "AKTUALIZACJA 1" w oryginalnym zapytaniu, które daje więcej kontekstu do problemu. Korzystanie z metody określonej w blogu ScottGu może nie pomóc w spełnieniu wszystkich wymagań, które mamy. Musimy mieć witrynę na żywo - ale nie jest dostępna dla wszystkich, dopóki się nie rozgrzeje. Musimy przejść przez nasze strony, zanim wszyscy będą mogli z nich korzystać. –

+0

@Dhwanil Shah, rozgrzewka ma miejsce po uruchomieniu usług IIS, tj. Po ponownym uruchomieniu serwera i dużo wcześniej, zanim pierwsze żądanie zdążyło trafić w aplikację. –

+0

Czy będę mieć dostęp do stron w mojej witrynie z kodu wewnątrz implementacji IProcessHostPreloadClient? –

4

Każda aplikacja, która generuje żądanie serwera dla hostowanych zasobów, może służyć do rozgrzania procesu IIS. Dokładna liczba żądań zależy od tego, które części wymagają rozgrzania. Zazwyczaj rozgrzewka jest używana dla:

  • Uruchamianie procesu roboczego. W tym celu wystarczy poprosić o jeden zasób, aby ogrzać proces dla całej aplikacji.
  • Wykonaj statyczną inicjalizację, uruchomienie bazy danych lub buforowanie wstępne. Wszystko, co zrobisz w pliku Global.asax, stanie się, gdy wykonasz swoją pierwszą prośbę, więc jeśli zdołasz przeprowadzić całą inicjalizację, musisz tylko wykonać jedno żądanie strony.
  • Wymuś wstępną kompilację stron ASP.NET. Aby tak się stało, musisz trafić na każdą stronę. Na szczęście nie jest to zwykle kosztem czasu, więc prawdopodobnie nie musisz się tym martwić. Jeśli masz pojedyncze strony, które ładują się powoli, możesz je rozgrzać osobno.

Proces "rozgrzewki" nie jest niczym magicznym. Musisz tylko wymusić IIS, aby podał adres URL. Wszystko, o czym wspomniałeś, zadba o to: za pomocą narzędzia do testowania warunków skrajnych przetestuj adres URL, pisząc niestandardowe narzędzie do wysyłania żądań HTTP, a nawet po prostu wykasuj takie narzędzie jak "wget" lub skrypt PowerShell, aby pobrać adresy URL, robiąc to .

Jeśli chodzi o ograniczanie dostępu do localhost, o ile wiem, w ramach IIS, jedynym sposobem na zmianę wymagającą ponownego uruchomienia usług IIS. Zawsze możesz utworzyć wstępne żądanie hakerskie do swojej aplikacji i utrzymywać tam stan, a twój proces rozgrzewania powinien odpowiadać konkretnemu adresowi URL, który przełącza ten stan do "otwarcia".Ale nie jestem pewien, co byś zrobił. Jeśli w jakiś sposób użytkownik próbował przesłać zapytanie do Twojej witryny przed zakończeniem rozgrzewki, wszystko, co może się stać, to odpowiedź na Twoją odpowiedź zajęłaby dużo czasu, a następnie w końcu uzyskałaby żądaną stronę. Jeśli podczas rozgrzewki zostałyby zablokowane poza witryną, zamiast tego pojawiłby się błąd sieciowy przeglądarki, który twierdził, że witryna jest w trybie offline, co (dla mnie) brzmi znacznie gorzej.

+3

Możesz prekompilować strony przed wdrożeniem (podczas proces kompilacji), który ma dodatkową zaletę znajdowania błędów, które nie są wykrywane podczas kompilacji C#/VB.NET. –

+0

@Michael - Dziękujemy za zainteresowanie. Proszę sprawdzić "AKTUALIZACJĘ 1", aby uzyskać więcej kontekstu dla zapytania. –

+0

@Jakub - Używamy wstępnej kompilacji ASP.NET. –

9

Firma Microsoft wydała moduł, który spełnia dokładnie to, o co prosisz. Interfejs Application Initialization Module for IIS 7.5 poprawia responsywność witryn sieci Web, ładując aplikacje WWW przed pierwszym żądaniem.

Można określić serię adresów URL, które zostaną wstępnie załadowane przez usługi IIS przed zaakceptowaniem żądań od rzeczywistych użytkowników. Nie sądzę, aby można było uzyskać prawdziwą identyfikację użytkownika, ale może można skonfigurować symulowane strony, które nie wymagają logowania, które spełnia tę samą rozgrzewkę, o którą prosisz?

Najbardziej interesującą cechą tego modułu jest to, że moduł ten umożliwia również nakładanie się procesu recyklingu. The following tutorial from IIS 8.0 zawiera podejście krok po kroku, w jaki sposób umożliwić nałożony proces recyklingu.

Po wykryciu przez system IIS, że aktywny proces roboczy jest poddawany recyklingowi, usługi IIS nie przełączają aktywnego ruchu na nowy, poddany recyklingowi proces roboczy, dopóki nowy proces roboczy nie zakończy uruchamiania wszystkich adresów URL inicjowania aplikacji w nowym procesie. Dzięki temu klienci przeglądający Twoją witrynę nie widzą stron inicjalizacji aplikacji po uruchomieniu i uruchomieniu aplikacji.

Ten moduł IIS Application Initialization jest wbudowany w IIS 8.0, ale jest to available for download for IIS 7.5.

Powiązane problemy