Application_start无法正常工作

时间:2014-09-22 11:32:29

标签: c# asp.net .net

我在application_start()文件的global.asax方法中编写了一些代码。在IIS服务器上部署应用程序时,不会调用它。当我在.NET框架中运行代码时,可以访问代码。

我已尝试多次重启应用程序,但它仍然无效。

我也尝试过以下链接中的建议。

Application_Start not firing?

5 个答案:

答案 0 :(得分:2)

在尝试调试Appplication_Start之前,您需要了解一些事项。有 -

一:代码执行时,为什么几乎不可能通过附加代码进行调试。

当应用程序池启动并且您的网站首次启动时,将执行应用程序启动方法。如果您将新的可交付成果部署到IIS,那么IIS可能会自行重新启动它,但不能保证它会。因此,部署新代码并不能保证它将重新启动池并执行应用程序启动。您应该重新启动应用程序池以保证应用程序启动的执行。

在调试IIS应用程序时,Visual Studio将自身附加到名为w3wp.exe或similart(我忘记了实际的可执行文件名称)的进程,这是一个工作进程,只有在您的应用程序池被记住之后才可用。并且您的网站已启动。因此,换句话说,如果您在服务列表中看到这个,那么应用程序启动已经执行并且附加到它将不会给您机会调试它。随着时间的推移,这是一场拉锯战。

因此,换句话说,除非你非常快,否则调试应用程序启动是不可能的。

二,解决方案1 ​​ - 使用Dev Server

使用Asp.net开发服务器或IIS Express在Visual Studio中启动您的应用程序,然后您就可以进行调试了。但是,如果您真的想在IIS上进行调试,请查看下一节

二,解决方案2 - 使用IIS

名称System.DiagnosticsDebugger中有一个库,它有一种很好的方法可以在代码中调用调试器。你可以在这里阅读 - http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx

使用此修改应用程序 -

public void Application_Start(){
    ....... //other codes
    Debugger.Break() or Debugger.Launch()
}

当这一行执行时,IIS将暂停执行,并将显示一个调试器选择器窗口(类似于附加的那个)enter image description here,在vs中打开你的解决方案并从列表中选择vs,将是能像往常一样调试...... :)

如果您使用的是Windows 8并且调试器未启动,请阅读本文以启用它 -

http://blogs.msdn.com/b/mapo/archive/2013/11/07/debugger-launch-not-displaying-jit-debugger-selection-popup-on-windows-8-8-1.aspx

三:非常重要

我注意到你说,你在Application_Start中添加了db条目。您应该记住,Application_Start没有HttpContextViewContext,因此您的数据库访问代码可能因其他许多原因而失败。

答案 1 :(得分:1)

这对我有用:

  • 菜单 - >构建 - >清洁解决方案
  • 菜单 - >构建 - >重建解决方案

然后,Application_Start()只是第一次被触发。

答案 2 :(得分:1)

确保Global.asax文件实际部署到根目录文件夹中。如果文件不存在,那么为Application_Start编写的代码将永远不会被调用。

还要确保签名正确

public class Global : System.Web.HttpApplication {
   protected void Application_Start(object sender, EventArgs e) {/*do something here like logging so you know it was called*/}
}

答案 3 :(得分:1)

如果您运行的是Server 2008R2(或更早版本)和/或IIS 7.5,则可能需要查看“应用程序初始化”模块。这可以在这里下载:

www.iis.net/downloads/microsoft/application-initialization

对于8.0之前的IIS版本,在第一个Web请求到达之前不会调用应用程序启动。我正在阅读您的问题,因为您希望在第一次Web请求之前启动应用程序,是吗?

以下是配置此模块的精彩指南(如果它适用于您): http://blogs.msdn.com/b/benjaminperkins/archive/2014/01/07/configure-the-iis-application-initialization-module.aspx

关键要点是您需要将应用池设置为“AlwaysRunning”而不是“OnDemand”。您还需要为您的网站设置preloadEnabled标志。完成这两个操作后,启动iisreset,您应该看到应用程序的结果开始(查看数据库,因为它在那里写)。

其他答案也是相关的,因为这很难调试,你会错过你习惯的所有细节,例如app start中的httpcontext。

如果您运行的是IIS 8.0,您仍应阅读上述链接以配置预加载。

答案 4 :(得分:0)

在我的生产环境中,缺少App_global.asax.compiled,并且未触发global.asax的所有内容。