Одно приложение ASP.NET (случайно) в нескольких доменах приложений или частая повторная проверка приложений - PullRequest
8 голосов
/ 28 июня 2011

Я отлаживаю приложение ASP.NET, которое, по-видимому, случайно теряет содержимое некоторых статических полей.Я сделал несколько простых пользовательских журналов (потому что даже log4net был нестабильным) и обнаружил, что приложение загружается в два домена приложения.Вот фрагмент из журнала:

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

Элемент после времени / даты является текущим доменным именем приложения.

Приложение представляет собой обычный ASP.NET (не MVC)приложение обрабатывает некоторые запросы AJAX и передает их в несколько библиотек ASP.NET.Единственное необычное, что одна из библиотек немного размышляет о поиске некоторых классов, которые затем создают их и запускают в отдельных потоках.Но он ничего не делает явно с доменами приложения.

Кстати, выделенная строка из файла журнала происходит из самого приложения ASP.NET (т.е. не из одного из этих отдельных потоков) из обработчика ASPX.

Правильно ли я интерпретирую журнал?Если это так, что может привести к загрузке и обслуживанию приложения из нескольких доменов приложений?

Редактировать: Этот вопрос в основном связан с этим вопросом: Состояние приложения ASP.NET противСтатический объект .Однако, исходя из того, что я видел сегодня, кажется невозможным полагаться на статические поля.Я мог бы переместить все в объект Application, но я думаю, что синхронизация была бы немного громоздкой.Я все больше и больше убежден, что приложение делает что-то нестандартное.

Редактировать 2: Я провел немного больше исследований, и кажется, что всегда есть отношение 1-1между приложениями и доменами приложений (что я и ожидал).Поэтому я думаю, что то, что я вижу, это переработка.

Редактировать 3: После еще нескольких экспериментов и осмотра я включил мониторинг работоспособности IIS (на основе http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx), иобнаружил, что приложение запускается дважды в быстрой последовательности. Это на самом деле довольно загадочно. Вот события журнала:

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 

Приложение MyApp находится в другом приложении (RootApp).быть двумя сообщениями журнала: запуск MyApp и запуск RootApp.

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Вы случайно установили число рабочих процессов в свойствах AppPool (вкладка «Производительность») на 2?

В этих свойствах также может быть параметр, который позволяет вашему AppPool перезагружаться слишком часто, основываясь наномер или запросы или любой из этих параметров переработки

1 голос
/ 27 июля 2011

Если бы мне пришлось угадывать, что на вашем сайте есть что-то, что изменяет файлы web.config, dll, aspx, asmx или какой-либо другой файл.Всякий раз, когда эти файлы изменяются, запускается новый экземпляр веб-приложения, и любые новые запросы обслуживаются из этого нового веб-приложения, в то время как старые запросы обслуживаются из существующего приложения.Как только все старые запросы завершены, старое приложение закрывается.Это хорошо для развертываний, так как не нарушает существующие сеансы людей, но это означает, что у вас не должно быть ничего, что автоматически изменяет файлы web.config при каждом запросе или тому подобное.

Эта страница описана во многихподробнее о том, как это работает http://technet.microsoft.com/en-us/library/cc759560(WS.10).aspx

...