Home
    Shop
    Advertise
    Write For Us
    Affiliate
    Newsletter
    Contact

Restart and Stop of ASP.NET Application

ASP.NET web application could restart or stop for numerous reasons. Most of the time, we would like that ASP.NET website is alive.Web hosting companies often claim 99.99% up time. But, in reality it is hard to achieve 99.99% uptime. Even if server is online and working, that doesn't mean that ASP.NET web application is also active and working properly.

 

To save resources, web server could restart or completely stop web application many times per day. Every time when this happens, website visitors could experience slow page loads, sessions could be lost, or even see error message in browser like "408 Request Timeout", "500 Internal Server Error", "503 Service Unavailable" etc.

What happens when ASP.NET Application restarts

ASP.NET application restart will cause these consequences:

- Cache is cleared
- Application State is lost
- Sessions' state are lost if InProc is used. InProc is used in most cases, because it is fastest and default method. In the other hand, if sessions are stored remotely they remain after application restarts.
- Application_End and Application_Start procedures in Global.asax are executed.

To keep sessions when application restarts, use Session State Server or SQL Server. Notice that state server stores sessions in memory, so it is faster than SQL Server which stores data to database. But, for the same reason, SQL Server is more reliable option.

Possible reasons why ASP.NET application could restart

ASP.NET application could restart because really a lot of reasons. It probably happens more often than you think. ASP.NET web application will restart because of:

- Change in Web.Config file. Change of any parameter, adding of space character or even changing file's modified date will cause app restart.
- Change in machine.config, just like for web.config.
- Change in /bin folder. Application will restart if you add, update or delete any file in /bin folder.
- Change in App_Code folder. Adding, deleting or editing classes inside App_Code will cause application restart.
- Change in Global.asax file, like in web.config.
- Change in App_LocalResources folder
- Change in App_GlobalResources folder
- Change in App_WebReferences folder
- Change in Profile configuration
- Reached compilation limit, defined with numRecompilesBeforeAppRestart in machine.config file. Default value is 15. ASP.NET watches for any changes in files. When certain number (15 by default) of files is changed, web application is restarted automatically. The reason for this is to save memory on server. On some websites where files are generated dynamically, this could cause frequent restarts.
- Antivirus software changes file's modified date. Antivirus program scans files like Web.config or Global.asax. Some antivirus programs change Modified date of these files and that cause pretty frequent restarts, which decrease website performances.
- IIS restarts, and all websites will restart too.
- Change of physical path to web application
- IIS recycled website due to inactivity (20 minutes by default). If website has no visitors, IIS will unload it from memory to save resources. Application will be started again on when next visitor comes.

How to change website configuration without restarting ASP.NET application

Any change in Web.config file will cause ASP.NET application to restart. But, it is possible to create one or more external .config files which don't cause application restart. To connect external .config files with main Web.config, use configSource parameter. Here is an example code snippet, used to read external configuration from three files:

<connectionStrings configSource="db.config"/>
       <appSettings configSource="app.config"/>
   
       <system.net>
           <mailSettings>
               <smtp configSource="mail.config"/>
           </mailSettings>
       </system.net>

So, in this example, we can change connection strings, application settings and mail settings. Application will not restart when any of these files change. Any external .config file should contain only section where is called. For example, db.config is called from <connectionStrings /> and should contain only connection strings, like this:

<connectionStrings>
     <clear />
     <add name="ConnStringName" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;" providerName="Syste.Data.SqlClient"/>
   </connectionStrings>

How to restart ASP.NET Application with code

To restart ASP.NET web application programmatically with server side code, use

System.Web.HttpRuntime.UnloadAppDomain()

method. This method will stop and unload web application. Application_End procedure in Global.asax will be executed. Application will start again on next request.

How to stop or get offline ASP.NET web application

The reason why you want to stop ASP.NET application could be if you do big website upgrade, which could include updating of pages, database, dlls etc. This process can take some time. If visitor tries to see pages, could experience errors. Sounds better to place a message that site is down for maintenance and that will be live again at certain time.

One more reason could be to unlock resources for updating. Some resources are locked while application is running, like SQL Server Express .mdf file in App_Data folder or MS Access .mdb file. You can't in the same time upload new database file and have active connections.

There are three common ways to make ASP.NET application offline:

- Using IIS to stop website
- Use App_Offline.htm file
- Use HttpRuntime element in Web.config

How to make website offline using IIS

Simple solution is to stop website from IIS management console. More visitor friendly is to redirect all requests to info page where you can explain why website is down and when will be active again. On IIS 6,

Http redirection in IIS 6

On IIS7, Http redirection is not available by default. First, go to Control Panel -> Turn Windows Features On or Off -> Internet Information Services -> World Wide Web Services -> Common HTTP Features -> and select Http Redirection like in next image:

Enable HTTP redirect on Windows 7

Now, when you start IIS and select website, you will see new "HTTP Redirect" icon in Features View. Use is almost the same like on IIS 6, you need to specify exact destination for all requests. In addition to that, IIS 7 gives an option to set status code that will be returned to browser.

Accessing to Control Panel and IIS is impossible if you are on shared hosting where developer usually has very limited rights. Fortunately, ASP.NET offers similar option using App_Offline.htm file.

Going offline with App_Offline.htm file

Very simple way to make your web application offline is by using App_Offline.htm file. Create new HTML page and name it "App_Offline.htm". Copy the page to root folder of website. Now, if you try to visit website in browser, server will return only App_Offline.htm. Web server will shut down the application and unload it

On this page, you can place some information to visitors about why website is down, and when they could expect to be online again. You can put practically anything in this file, but be careful about its size. If App_Offline.htm is smaller than 512 bytes Internet Explorer (occurst on IE 6) will show its own HTTP error message. To avoid this, be sure that App_Offline.htm has more than 512 bytes, even if you place some invisible HTML comments.

When website upgrading is finished, delete or rename App_Offline.htm from root folder. Web application will go online again after next request.

Keep in mind that solution with App_Offline.htm page works only for ASP.NET pages. Many web hosting providers today offer several technologies in same hosting package, so you can use ASP.NET, PHP, classic ASP etc., all mixed on single website. Notice that any PHP, ASP or static HTML pages will still work normally after App_Offline.htm is uploaded.

Make website offline using httpRuntime element in web.config

To make web application offline, you can use Web Site Administration Tool. If you can't use WSAT, edit web.config manually. Add <httpRuntime enable="false" /> inside <system.web> tag, like this:

<configuration>    
<system.web>
    <httpRuntime enable="false"/>
...

Application will not be loaded to memory. Any request to ASP.NET page will return error 404 "The resource cannot be found". This error is not friendly as App_Offline.htm file where you can inform visitors what is happening.

<httpRuntime enable="false"/> affects only ASP.NET pages, so content, like images, static HTML pages, classic ASP pages etc., will still be available.

Website is automatically stopped when IIS recycled process

After some time of inactivity (20 minutes by default) IIS will unload ASP.NET application. Application will load again on first request, but without cache, application state etc., like when application is restarted.

Application start could take few seconds, so first response is usually much slower. It could be annoying if you do your best to optimize code, database, images and everything else to get faster website and then wait long seconds in front of screen until application is started.

If you have an access to IIS, you can create new or change existing application pool. Uncheck Recycling Conditions and increase Idle Time-out (in minutes).

Also, it is possible to keep web application alive by making periodical requests. The fastest option is to use some web hosting automation program, like DotNetPanel, Plesk, Helm etc. If your hosting provider enables scheduled tasks option, you can create new task in Helm to call certain web page, and set execution time every 20 minutes. Now, because page is requested every 20 minutes, Idle Time-out will never occur and website will have fast response any time. There are some more options to implement scheduled tasks, described in Using Task Scheduler or Windows Service For Scheduled Tasks tutorial.

Conclusion

As you see, there are many reasons that cause ASP.NET application to stop or restart. You probably can't avoid application restart sometime. Nor you should, this is useful process when web server free memory. Just be sure that restart doesn't occur to often, since that could hurt visitor's experience. Users' sessions could be saved if you use Session State Server or SQL Server, instead of default InProc option.

There are few options to get website offline. The most reliable is using of IIS because it will redirect all requests. But, if you have not access to IIS management console, you have App_Offline.htm and <httpRuntime enable="false" /> options. Just be aware that last two affects only ASP.NET files.

If there are no visitors on website, IIS will unload application. When first visitor comes, application will be loaded again. This sounds good in theory, but in practice this visitor will wait long time until requested page is shown. To keep low traffic website alive, make periodical artificial requests using windows service or some other scheduled tasks option. More about scheduled tasks read in Using Task Scheduler or Windows Service For Scheduled Tasks and Scheduled Tasks in ASP.NET tutorials.


Tutorial toolbar:  Tell A Friend  |  Add to favorites  |  Feedback  |   


comments powered by Disqus