I have an application made on asp.net mvc 2 and it is on IIS 7.5 on my pc I tried profiling it and I noticed that Application_Start gets called more than once, anybody knows why is this happening ?
In my MVC application ,I am updating my web.config at runtime through application_start event.So, ideally it should be done only when the application is started.BUT in MY mvc application the application_start event of global.asax is being called multiple times , even when i have not restarted the application.
Its being repetadly called when i am calling different actions , so the webconfig is repetedly updating & making my application very very slow. what's the reason & how to handle this .
I've been using different routes.MapPageRoute registrations that were dependent on the domain (I have multiple pointing to the same web application). I was accomplishing this by determining the domain (or sub-domain) using Context.Request.Url.Host within RegisterRoutest. Of course, this all is kicked off at Application_Start, which worked in IIS6, but now I've moved to IIS7, and Request doesn't seem to be available at Application_Start anymore. Can anyone suggest a way to get the domain at Application_Start, or is this simply not possible with IIS7?
Here's an example of the code I've been using in my Global.asax:
I'm implementing a simple HttpModule, where I want some code to run when the web application is started. But I'm surprised to find that the Application_Start event I would normally use from Global.asax is not available from a HttpModule. Is that correct, or am I missing something here?
How do I hook into the Application_Start event from an HttpModule?
I'm in the process of adding ASP.NET MVC code to a preexisting ASP.NET Webforms project. The various tutorials suggest adding routing to a method called from Application_Start() in Global.asax. My Global.asax already has an Application_OnStart(Object,EventArgs) method with some setup code.
If I try to have both Start and OnStart, the OnStart doesn't get called (and the setup fails, causing errors). It looks like I have to choose one or the other.My question is: which one should I be using? What is the difference between them? Are they called at different times?(Note: at the time of this writing, the top three Google hits are useless and/or misleading.
I have a site that uses ActiveRecord. I'm getting an exception that says "An ActiveRecord class () was used but the framework seems not properly initialized. Did you forget about ActiveRecordStarter.Initialize() ?" This is a web application, and the Initialize() method is called by the Application_Start event handler.
I created a new page that also calls the initialize() method. If I visit that page once, then the rest of the site works. If I visit it a second time, I get an exception stating that the Initialize() method can only be called once.
I've tried modifying the web.config and resetting the application pool to force Application_Start to run.
This only happens in production; dev, my stage, and client stage are fine. Production is the only load-balanced environment--I'm not sure if that comes into play.
Edit: We have another site deployed in the same environment which successfully uses ActiveRecord with the same initialization code. One difference is that the site that is working has only the ActiveRecord code in Application_Start; the site that doesn't also sets up some URL routing in Application_Start.
I have some code that initializes a static singleton class, which is needed by all requests. Therefore I thought I could add it to global.asax Application_Start. Can I be 100% sure that all requests will block while Application_Start is loading to guarantee that all the requests will have access to it?
I have 3 IIS7 virtual directories which point to the same physical directory. Each one has a unique host headers bound to it and each one runs in its own app pool. Ultimately, 3 instances of the same ASP.NET application.
In the Application_Start event handler of global.asax I would like to identify which instance of the application is running (to conditionally execute some code). Since the Request object is not available, I cannot interrogate the current URL so I would like to interrogate the binding information of the current virtual directory?
Since the host header binding is unique for each site, it would allow me to identify which application instance is starting up.
I've got an ASP.NET web app that is starting to show some very strange behavior. Here's some example code:
// in Bar.cs public class Bar { public static Baz baz = Something.Step2(); } // in Global.asax public void Application_Start(...) { Something.Step1(); }
The short version of the story is this: On some machines, Something.Step2 is executed before Something.Step1 and is throwing an unhandleable exception. On other machines, Step1 correctly executes before Step2. Global.asax and all the objects it uses do not refer to Bar at all.
When are static fields supposed to execute in relation to other programming elements? Why would two machines (both Win7 64-bit, both with .NET 4.0, same IIS version, etc) execute things in different orders? The order is consistent on each machine too. On my machine, it always executes Step2 before Step1, but on my coworker's machine it always executes Step1 before Step2.Update I've found the root cause why my static field is being accessed. Class "Bar" from my example is actually a custom authentication module, and is referenced in web.config as the Authentication handler under System.webServer. If I remove that line from web.config, my system calls Step1 first and never calls Step2 at all. My question changes subtly to: "Why does web.config cause my static initializers to fire, and why does it cause them to fire before Application_Start executes?"
In our Application_Start event handler we're performing some actions that intermittently fail due to file locking issues. In this scenario we would like to return the application to an "un-started" state.By this I mean that the user will be shown an error page, and then the next time a user hits the site the Application_Start event will be fired again.
I'm looking at automating some reporting that I'm going to be generating. I want the reports to be generated and emailed at a particular time every day. These times will vary, and so will the types of reports.I was wondering if there were any better solution to creating a routine with a timer that executes at a set time every day? If I include this class and routine in the Application_Start of my Global.asax, will it always be running, or is there some awesome EventListener that I'm not aware of?
what might be best suited to place in the Application_Start and Session_Start subroutines? I know when each subroutine is called. Application_Start when the first user first accesses the web application. Session_Start when a user opens a session with the application. But what code belongs in each of these subroutines. What should the code in each subroutine do?
In my company app they are doing the following. I do not understand that what initialize does? Do we need to Initialize assemblies before using them? and what kind of assemblies needs to be initialized?
I am getting user information from Ldap server.Because of this I am getting performance issues in my application. For this I have a created a method in Application_start event then everything is working fine, my problem is when ever user adds in Ldap those information is not getting reflected in the application because we have implemented this in application_start event.SoI want to keep this method in application_start only and I want to update the new users also in my application how to do this.If I write same code in session_start event then if user clicks on user maintenace tab then processing the request message is coming. So I want to be keep in Application_start event and also it should update the latest user information in the application.
We have a component that needs to sit in asp.net that creates a listening socket on a well known port.The reason we have the socket is the asp.net need component needs to received events from external services and other technologies weren't quick or flexible enough.We start the socket listening in application_start,and close the socket in application_end. The issue is if we are receiving http requests to the web site, and modify the web.config, the application_start event is called before the application_end is called,so we cannot open the socket (we get an error about duplicate socket being open). We dont have a reference to the original socket in the application_start after the web.config change, so we cannot shut it down from there.
We have written a basic event logger that's registered in our Computer Management->System Tools->Event Viewer that writes any exceptions in our ASP..Net/C# web application.
IE:
[Code]....
In order to write to the proper Event, we thought we could set the LOG NAME and SOURCE NAME properties in the Application_Start(), but it seems we're experiencing situations where the event logger is losing a reference to the SOURCE NAME property and we're getting an intermittent error (IE: on LINE 8) saying: Must Specify Value For Source. Here's where we set it:
[Code]....
Perhaps the Application_Start() is not the best place for setting these properties?
I have the same issue, I have added the On before the Application start, or Session Start and it is still not working.Application_OnStart or Application_Start is not firingSession_OnStart or Session_Start is not firing..Note that in my development environment it is firing (both of the names).When I am adding the Global.asax file, there is only one file (no .cs file). And when I am publishing the project, I am not getting the Global.asax file, I am getting a xxxxGlobal.asax.dll file on my bin folder...
I've gone rounds with this ever since I started programming classic ASP 12 (or so) years ago and I've never found a great solution because the architecture of ASP and ASP.NET has always been a swamp of bad practices, magic shared singletons, etc. My biggest issue is with the HttpApplication object with its non-event events (Application_Start, Application_End, etc.).
If you want to do stuff once for the entire lifespan of an HTTP application, Application_Start is the obvious place to do it. Right? Not exactly. Firstly, this is not an event per se, it's a magic naming convention that, when followed, causes the method to be called once per AppDomain created by IIS.
Besides magic naming conventions being a horrible practice, I've started to think it might be a reason there exist no such thing as a Start event on the HttpApplication object. So I've experimented with events that do exist, such as Init. Well, this isn't really an event either, it's an overridable method, which is the next best thing.
It seems that the Init() method is called for every instantiation of an HttpApplication object, which happens a lot more than once per AppDomain. This means that I might as just put my startup logic inside the HttpApplication object's constructor.
Now my question is, why shouldn't I put my startup logic in the constructor? Why does even Init() exist and do I need to care about Application_Start? If I do, can anyone explain why there is no proper event or overridable method for this pseudo-event in the HttpApplication object?
And can anyone explain to me why in a typical ASP.NET application, 8 instances of my HttpApplication are created (which causes the constructor and Init to run just as many times, of course; this can be mitigated with locking and a shared static boolean called initialized) when my application only has a single AppDomain?
I am using Visual Studio 2005, and running my application from inside it, directly using its development application server.
If I set a breakpoint inside Application_Start and one inside Session_Start, the latter is reached first, and I honestly think it should be the other way around.
How can I tell from within an ASP.NET HttpHandler if it is executing because of a call to Server.Execute("myHandler.ashx")or because of the user linking directly to myHandler.ashx? (Besides using a querystring parameter).