【问题标题】:MVC3 App Restarting Every PageloadMVC3 应用程序重新启动每个页面加载
【发布时间】:2011-09-09 15:41:36
【问题描述】:

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

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

在我让它在 global.asax 中的 Application_Start 方法中调用一个初始化方法之前,每次页面加载都会受到影响。

即使 Visual Studio 没有运行,页面仍然需要很长时间才能加载。

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

【问题讨论】:

  • 应用程序可能因多种原因重新启动(web.config 更改、bin 目录更改、衍生线程中未处理的异常等)。我会检查这个问题的答案,看看你是否有任何问题:stackoverflow.com/questions/302110/…

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


【解决方案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);
  }

【讨论】:

  • 感谢代码!好的,这绝对是导致它的 bin 目录的变化。是否有任何日志事件可以告诉您发生了什么变化?
  • 据我所知没有,您可以尝试使用 Sysinternals Process Monitor 或 FileMon,将过滤器设置为 bin 目录并监视文件系统中的更改,您将看到更改了哪些文件。 technet.microsoft.com/en-us/sysinternals/bb896645
  • 更新:发现 Visual Studio 已默认将日志文件放在 bin 目录中,当然每次访问数据库时都会更新该日志文件。我一直在尝试为日志文件设置其他文件夹的权限,但没有成功。你知道任何关于权限的教程吗?我的应用正在 DefaultAppPool 中运行
  • hm,我不确定我们在谈论什么日志文件,也许最好在 SO 上发布新问题,更多人会看到它
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多