我在application_start()
文件的global.asax
方法中编写了一些代码。在IIS
服务器上部署应用程序时,不会调用它。当我在.NET框架中运行代码时,可以访问代码。
我已尝试多次重启应用程序,但它仍然无效。
我也尝试过以下链接中的建议。
答案 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.Diagnostics
,Debugger
中有一个库,它有一种很好的方法可以在代码中调用调试器。你可以在这里阅读 - 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将暂停执行,并将显示一个调试器选择器窗口(类似于附加的那个),在vs中打开你的解决方案并从列表中选择vs,将是能像往常一样调试...... :)
如果您使用的是Windows 8并且调试器未启动,请阅读本文以启用它 -
三:非常重要
我注意到你说,你在Application_Start中添加了db条目。您应该记住,Application_Start没有HttpContext
,ViewContext
,因此您的数据库访问代码可能因其他许多原因而失败。
答案 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的所有内容。