Событие ASP.NET application_start запущено

Я работаю над приложением ASP.NET и кэширую некоторые справочные данные. Код для создания кеша вызывается в событии application_start в global.asax. Моя проблема в том, что событие application_start вызывается несколько раз, что замедляет доступ к приложению. Чтобы проверить проблему, я переустановил приложение. Событие application_start было запущено при первом доступе к приложению (как и ожидалось) и снова примерно через час, хотя я не вносил никаких изменений. Я не вношу никаких изменений файловой системы в bin-файл приложения, а для пула приложений заданы настройки повторного использования по умолчанию (1740 минут), поэтому я не уверен, почему вызывается событие.

Спасибо


person klone    schedule 14.07.2011    source источник
comment
Вы пробовали добавить Application_End в свой global.asax и установить точку останова? Вы можете получить трассировку стека, как только она будет достигнута, а затем опубликовать ее здесь.   -  person BumbleB2na    schedule 14.07.2011


Ответы (2)


Я бы проверил настройку тайм-аута простоя (по умолчанию 20 минут). Если сайт не обрабатывает запросы в течение 20 минут, рабочий процесс завершится, поэтому при следующем запуске приложения вы получите еще одно событие запуска приложения.

person Keith    schedule 14.07.2011
comment
Ты был прав. Я установил нулевой тайм-аут простоя в настройках пула приложений, и проблема была решена. - person klone; 21.07.2011

Вы можете записать причину перезапуска в методе Application_End файла Global.asax.cs, я использую этот код:

protected void Application_End(object sender, EventArgs e)
{
  HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);

  string shutDownMessage = "";

  if (runtime != null)
  {
    shutDownMessage = Environment.NewLine + "Shutdown: " +
                      (string)runtime.GetType().InvokeMember("_shutDownMessage", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null) + 
                      Environment.NewLine + "Stack: " + Environment.NewLine +
                      (string)runtime.GetType().InvokeMember("_shutDownStack", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null);
  }
}
person Antonio Bakula    schedule 14.07.2011