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.