Что может привести к повторному использованию рабочего процесса ASP.NET?

StackOverflow https://stackoverflow.com/questions/94042

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Я предполагаю, что моя проблема (описанная ниже) вызвана 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 или нет.

Это было полезно?

Решение

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

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

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

Если состояние сеанса важно для вашего приложения, используйте либо SQL state management, либо State Server, который поставляется с ASP.СЕТЬ.

Ваше здоровье,

РБ.

Другие советы

У нас возникли проблемы с сессией, когда мы выполняли миграцию приложения 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>
...
...

Это поможет нам проверить, перерабатывается ли AppDomain.Мы можем увидеть это в нашем окне просмотра событий.Ссылка на более подробную информацию находится вот здесь 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, и приложение начало работать стабильно.

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

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

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

Цитата:

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

"Тип события 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 НОЛЬ."

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

Мое предположение было бы связано с потреблением памяти, но, настроив IIS для ведения журнала перерабатывает и ты будешь знать наверняка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top