Что может вызвать перезапуск рабочего процесса ASP.NET? - PullRequest
4 голосов
/ 18 сентября 2008

Вот мой текущий вопрос:

Я предполагаю, что моя проблема (описанная ниже) вызвана тем, что рабочие процессы ASP.NET перезагружаются, в соответствии с приведенными ниже ответами - я использую хранилище сессий InProc и не вижу большого шанса отойти, потому что с ограничением для других типов хранилищ, чтобы все объекты сеанса были сериализуемыми. Однако я не могу понять, что заставило бы рабочий процесс перерабатываться так часто, как я это вижу - насколько я знаю, не было никаких изменений файлов в каталоге приложения, и кажется, что параметры в IIS подразумевается, что процесс будет повторяться только каждые 1740 минут, что гораздо реже, чем фактическая потеря сеанса. Итак, мой вопрос сейчас, какие разные случаи могут вызвать перезапуск рабочего процесса ASP.NET?

Вот мой оригинальный вопрос:

У меня проблема с воспроизведением, которая возникает в моем веб-приложении ASP.NET. Приложение имеет одну главную страницу .aspx, которая загружается и инициализирует несколько переменных сеанса. Эта страница использует класс ASP.NET Ajax Sys.Net.WebRequest для многократного доступа к другой странице .aspx, которая использует переменные сеанса для выполнения запросов к базе данных и обновления главной страницы (главная страница никогда не запрашивается повторно).

Иногда, после некоторого времени использования страницы, вызывающего успешные HTTP-запросы, когда сеанс, созданный на главной странице, правильно переносится на подстраницу, один из запросов, кажется, вызывает создание нового сеанса ASP.NET - все переменные сеанса теряются (вызывая исключение в моем коде), и новый идентификатор сеанса сообщается на динамически запрашиваемой странице. Это означает, что внезапно главная страница отключается от сервера - что касается сервера, пользователь больше не входит в систему.

Я почти уверен, что это не тайм-аут сеанса - тайм-аут настроен на что-то смешное, время, необходимое для того, чтобы это произошло, является переменным, но никогда не бывает достаточно длинным, чтобы вызвать тайм-аут сеанса, и константа Sys.Net.WebRequests должна обновить таймер сеанса.

Итак, что еще может произойти, что приведет к тому, что HTTP-запросы потеряют связь с сеансом ASP.NET? К сожалению, я не отслеживал сетевой трафик, когда это происходило со мной, или я бы проверил, не застрял ли файл cookie сеанса ASP.NET.

Ответы [ 5 ]

3 голосов
/ 22 сентября 2008

У нас были проблемы с Session, когда мы выполняли миграцию приложения AnkerEx на новый сервер. Новый сервер имел Microsoft Windows Server 2008 в качестве операционной системы и Microsoft Internet Information Services 7. Также на сервере были установлены .NET Framework версий 1.0.3705, 1.1.4322, 2.0.50727, 3.0 и 3.5. Для решения этой проблемы я сделал включение мониторинга здоровья для События приложения, связанные с временем жизни в ASP.NET 2.0. Я добавил в web.config:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

Это помогает нам проверить повторы использования домена приложения. Мы можем видеть это в нашей Event Viewer. Ссылка на более подробную информацию http://blogs.msdn.com/rahulso/archive/2006/04/13/575715.aspx

После того как я завершил добавление в web.config, программа просмотра событий показала мне, что мой приложение перезапускается каждый раз, когда я нажимаю почти на любую ссылку в моем приложение. Из статьи http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspx я обнаружил, что ASP.NET имеет новое поведение - если мы будем делать удаление, например, подкаталог корневого каталога приложения, тогда ASP.NET 2.0 выполнит перезапуск AppDomain.

Проблема была в том что у меня в web.config была инструкция:

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

т.е. ASP.NET делал компиляцию aspx страниц в папке моего корня приложения. Я думаю, что он создал папки, может быть, и удалил некоторые из них также. Я удалил Инструкция tempDirectory и приложение начали стабильно работать.

3 голосов
/ 18 сентября 2008

Одним из решений будет использование StateServer, а не управление сессиями InProc.

Многие вещи могут привести к потере состояния сеанса:

  1. Редактирование Web.Config
  2. сброс IIS
  3. и т.д.

Если состояние сеанса важно для вашего приложения, используйте управление состоянием SQL или State Server, который поставляется с ASP. NET.

Приветствия

RB.

1 голос
/ 19 сентября 2008

Полагаю, это потребляет память, но настройте IIS для регистрации повторов , и вы точно будете знать.

1 голос
/ 18 сентября 2008

Это может быть вызвано необработанным исключением в фоновом потоке. Это может привести к завершению вашего рабочего процесса ASP.NET. Новый процесс запускается очень быстро, поэтому вы на самом деле не замечаете этого, но все ваши сеансы потеряны.

Вот статья, которая объясняет это гораздо лучше, чем я: Необработанные исключения ASP.NET 2.0

цитата:

Необработанное исключение в работающем приложении ASP.NET 2.0 обычно завершает процесс W3WP.exe и оставляет очень загадочную запись в EventLog примерно так:

"EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.1830, P3 42435be1, P4 app_web_ncsnb2-n, P5 0.0.0.0, P6 440a4082, P7 5, P8 1, P9 system.nullreferenceexception, P10 1012". *

Вот статья Microsoft KB, которая объясняет ту же проблему: KB911816 Необработанные исключения приводят к неожиданному завершению работы приложений на основе ASP.NET в .NET Framework 2.0

1 голос
/ 18 сентября 2008

Рабочий процесс, вероятно, цикличен. http://www.lattimore.id.au/2006/06/03/iis-dropping-sessions/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...