ASP.NET application_start событие сработало - PullRequest
1 голос
/ 14 июля 2011

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

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

1 голос
/ 14 июля 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);
  }
}
...