2011-06-28 6 views
8

Jestem debugowania aplikacji ASP.NET, która pozornie losowo traci zawartość niektórych pól statycznych. Zrobiłem kilka prostych rejestrów niestandardowych (ponieważ nawet log4net był niestabilny) i okazało się, że aplikacja jest ładowana do dwóch domen aplikacji. Oto fragment z dziennika:Jedna aplikacja ASP.NET (przypadkowo) w wielu domenach aplikacji lub często recycing aplikacji

6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 1 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 2 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 3 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 4 
6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 5 <- 
6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 6 
6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 7 
6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 8 

Element po dacie/godzinie jest bieżącą nazwą domeny aplikacji.

Aplikacja jest zwykłą aplikacją ASP.NET (nie MVC) obsługującą niektóre żądania AJAX i przekazującą je do kilku bibliotek ASP.NET. Jedyną niezwykłą rzeczą jest to, że jedna z bibliotek używa odrobiny refleksji do wyszukiwania niektórych klas, które następnie tworzą je i uruchamiają na osobnych wątkach. Ale nie robi nic jawnie z domenami aplikacji.

Nawiasem mówiąc, podświetlony wiersz z pliku dziennika pochodzi z samej aplikacji ASP.NET (tj. Nie z jednego z tych osobnych wątków) z programu obsługi ASPX.

Czy poprawnie interpretuję dziennik? Jeśli tak, co może spowodować, że aplikacja będzie ładowana i obsługiwana z wielu domen aplikacji?

Edytuj: To pytanie jest zasadniczo związane z tym: ASP.NET Application state vs a Static object. Jednak na podstawie tego, co widziałem dzisiaj, nie można polegać na statycznych polach. Mogłem przenieść wszystko do obiektu Application, ale chyba synchronizacja byłaby trochę uciążliwa. Jestem coraz bardziej przekonany, że aplikacja robi coś niestandardowego.

Edit 2: zrobiłem trochę więcej dochodzenie, i wydaje się, że zawsze jest 1-1 relacja między domenami aplikacji i aplikacji (co jest coś, czego się spodziewać). Myślę więc, że to, co widzę, to recykling.

Edit 3: Po kilku więcej eksperymentów i grzebie się, że włączone monitorowanie zdrowia IIS (na podstawie http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx), a okazało się, że aplikacja jest uruchamiana dwukrotnie w krótkim odstępie czasu. To naprawdę dość zagadkowe. Oto zdarzenia dziennika:

Event code: 1003 
Event message: Application compilation is starting. 
Event time: 6/28/2011 8:34:31 AM 
Event time (UTC): 6/28/2011 3:34:31 PM 
Event ID: d42336b18c264516a4ba5aa1e62df276 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT/MyApp-1-129537488697736549 
    Trust level: Full 
    Application Virtual Path: /MyApp 
    Application Path: [snip]\MyApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:33 AM 
Event time (UTC): 6/28/2011 3:34:33 PM 
Event ID: f7fbecb1ba1a4a24833016cec47458c6 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-2-129537488729428362 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: [snip]\RootApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:40 AM 
Event time (UTC): 6/28/2011 3:34:40 PM 
Event ID: 07a3dc31e8804caca1ddc3b2101962e3 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-3-129537488807712839 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: [snip]\RootApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:40 AM 
Event time (UTC): 6/28/2011 3:34:40 PM 
Event ID: db304b519a084fa797fbcfe66fbb0b48 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT/MyApp-4-129537488808502885 
    Trust level: Full 
    Application Virtual Path: /MyApp 
    Application Path: [snip]\MyApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

Aplikacja MyApp znajduje się w innej aplikacji (RootApp). Oczekuję, że będą to dwa komunikaty dziennika: uruchamianie MyApp i uruchamianie RootApp.

Odpowiedz

1

Gdybym musiał zgadywać, jest coś na twojej stronie, która zmienia pliki web.config, DLL, aspx, asmx lub jakiś inny plik. Ilekroć pliki te zostaną zmienione, rozpoczyna się nowa instancja aplikacji internetowej, a nowe żądania są obsługiwane przez tę nową aplikację internetową, podczas gdy stare żądania są dostarczane z istniejącej aplikacji. Gdy wszystkie stare żądania zakończą się, stara aplikacja zostanie zamknięta. Jest to dobre dla wdrożeń, ponieważ nie narusza istniejących sesji, ale oznacza, że ​​nie powinieneś mieć niczego, co automatycznie zmienia pliki web.config na każde żądanie lub podobne rzeczy.

Ta strona opisuje w znacznie lepszej szczegół jak to działa http://technet.microsoft.com/en-us/library/cc759560(WS.10).aspx

2

Czy przypadkowo ustawić liczbę procesów roboczych w AppPool Properties (TAB) Wydajność do 2?

W tych usługach może również istnieć ustawienie, które pozwala na zbyt częste przetwarzanie danych w aplikacji AppPool, w zależności od liczby lub żądań lub jednego z tych ustawień recyklingu.

Powiązane problemy