Application_start not working

后端 未结 5 505
青春惊慌失措
青春惊慌失措 2021-01-14 00:32

I have written some code in the application_start() method in my global.asax file. It does not get called when I deploy my application on IIS

相关标签:
5条回答
  • 2021-01-14 00:47

    If you are running Server 2008R2 (or earlier) and/or IIS 7.5, you might want to look into the Application Initialization module. This can be downloaded here:

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

    With IIS versions prior to 8.0, the application start is not called until the first web request arrives. I'm reading your question as you want your application start to be fired before the first web request, yes?

    Here is a fantastic guide to configuring this module (if it applies to you): https://blogs.msdn.microsoft.com/benjaminperkins/2014/01/07/configure-the-iis-application-initialization-module/

    The key takeaways is that you need to set your app pool to 'AlwaysRunning' instead of 'OnDemand'. You also need to set a preloadEnabled flag for your website. Once both of these are done, fire off an iisreset and you should see the results of your application start (look in the database since it's writing there).

    Other answers are relevant as well, in that this is tough to debug and you're missing all the niceties you're used to such as a httpcontext in app start.

    If you are running IIS 8.0 - you should still read the above link to configure preloading.

    0 讨论(0)
  • 2021-01-14 00:47

    This did work for me:

    • Menu -> Build -> Clean Solution
    • Menu -> Build -> Rebuild Solution

    Then, Application_Start() was fired only for the first time.

    0 讨论(0)
  • 2021-01-14 00:59

    Make sure that the Global.asax file is actually deployed to the destination folder in the root. If the file is not present then the code behind you have written for Application_Start will never be called.

    Also make sure the signature is correct

    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*/}
    }
    
    0 讨论(0)
  • 2021-01-14 01:05

    There are few things you need to know before you are trying to debug Appplication_Start. There are -

    One : When the code executes and why it is almost impossible to debug by attaching to it.

    The application start method is executed when the application pool starts and your website is being started up for the first time. If you deploy new deliverables to IIS, then IIS might restart it itself, but there is no guarantee that it will. So, deploying new codes does not guarantee that it will restart the pool and he execution of application start. You should restart your application pool to guarantee execution of application start.

    While debugging IIS applications, Visual Studio attaches itself to a process something named w3wp.exe or similart (I forgot the actual executable name), which is the worker process and only available after, remember after, your application pool is up and your site is up. So, in other words, if you are seeing this in service list, then the application start has already been executed and attaching to it will not give you a chance to debug it. It is kind of a tug of war with time.

    So, in other words, it is kind of impossible to debug application start unless you are very very quick.

    Two, the solution 1 - With Dev Server

    Launch your application in visual studio with Asp.net development server or IIS express, then you will be able to debug. But if you really want to debug on IIS, then check the next section

    Two, the solution 2 - With IIS

    There is a library in the name System.Diagnostics, Debuggerand it has a nice way to call debugger in code. You can read it here - http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx

    Modify you application start with this -

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

    When this line executes, IIS will halt execution, and will show you a debugger selector window (similar to the one attached)enter image description here, keep your solution open in vs and select that vs from the list, will be able to debug as usual... :)

    In case you are using windows 8 and the debugger does not launch, read this article to enable it -

    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: A very important thing

    I noticed that you said, you are adding db entries in Application_Start. You should keep in mind that, Application_Start does not have a HttpContext, ViewContext, So your db access code may fail for so many others reasons.

    0 讨论(0)
  • 2021-01-14 01:07

    In my case in production environment App_global.asax.compiled was missing and all content of global.asax not fired.

    0 讨论(0)
提交回复
热议问题