MVC3应用程序重新启动每个页面加载

时间:2011-06-06 22:00:58

标签: model-view-controller iis asp.net-mvc-3 iis-7

我正在IIS 7.5上运行一个使用EntityFramework访问大型数据库的MVC 3应用程序。我的公司访问数据库所需的框架初始化连接并设置一些线程上下文和安全检查 - 这个过程大约需要30秒。这应该只在应用程序启动时运行一次,但它会在每次加载页面时执行此操作。

我现在设置它的方法是在global.asax中有一个静态方法来检查HttpContext.Current.Application字典以查看是否已设置Context类的键,如果是,则返回Context,否则返回初始化Context然后返回它。每个页面加载,字典都是空的,因此必须重新初始化Context(在Visual Studio 2010中检查)。

在我使用它之前,在global.asax中的Application_Start方法中调用一个初始化方法,并且每个页面加载都会遇到它。

即使Visual Studio未运行,页面仍需要永久加载。

什么可能导致应用重置每个页面加载?

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码在Application_End中获取重启的原因:

  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);
  }