首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Application_start不工作

Application_start不工作
EN

Stack Overflow用户
提问于 2014-09-22 19:32:29
回答 5查看 8.7K关注 0票数 4

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

我已经多次尝试重新启动应用程序,但它仍然不起作用。

我还尝试了以下链接中的建议。

Application_Start not firing?

EN

回答 5

Stack Overflow用户

发布于 2014-09-23 11:57:52

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

One :什么时候执行代码,以及为什么几乎不可能通过附加到它来进行调试。

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

在调试IIS应用程序时,Visual Studio将自己附加到一个名为w3wp.exe或类似的进程(我忘记了实际的可执行文件名称),它是工作进程,并且只有在您的应用程序池和站点启动后才可用。因此,换句话说,如果您在服务列表中看到这一点,则应用程序启动已经执行,附加到它将不会给您提供调试它的机会。这是一种与时间的拉锯战。

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

2,解决方案1-使用开发服务器

使用Asp.net开发服务器或IIS express在visual studio中启动应用程序,然后就可以进行调试了。但是,如果您确实希望在IIS上进行调试,请查看下一节

2,解决方案2-使用IIS

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

修改你的应用程序,从这个开始-

代码语言:javascript
复制
public void Application_Start(){
    ....... //other codes
    Debugger.Break() or Debugger.Launch()
}

执行此行时,IIS将暂停执行,并显示调试器选择器窗口(与附加的窗口类似)

,保持您的解决方案在vs中打开,并从列表中选择该vs,将能够像往常一样调试...:)

如果您使用的是Windows8,但调试器无法启动,请阅读本文以启用它-

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

Three:一件非常重要的事情

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

票数 3
EN

Stack Overflow用户

发布于 2016-01-06 23:34:04

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

还要确保签名是正确的

代码语言:javascript
复制
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*/}
}
票数 2
EN

Stack Overflow用户

发布于 2016-01-06 23:57:06

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

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

对于8.0之前的IIS版本,直到第一个web请求到达时才调用应用程序启动。我正在读你的问题,因为你希望你的应用程序在第一个web请求之前开始被触发,对吗?

这里有一个很棒的配置这个模块的指南(如果它适用于你):https://blogs.msdn.microsoft.com/benjaminperkins/2014/01/07/configure-the-iis-application-initialization-module/

关键的要点是你需要将你的应用程序池设置为'AlwaysRunning‘而不是'OnDemand’。你还需要为你的网站设置一个preloadEnabled标志。完成这两项操作后,执行iisreset,您应该会看到应用程序启动的结果(查看数据库,因为它正在那里编写代码)。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25973106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档