Click here to Skip to main content
15,882,017 members
Articles / Hosted Services / Web Hosting
Tip/Trick

Recycling application pools on shared hosting

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
5 Oct 2011CPOL 13.3K   1  
You may find that when you upload new code or assemblies, your content doesn't refresh.

I recently signed up for ASP.NET hosting on a server that uses LAMP as a front-end and proxies ASP.NET requests to a back-end IIS server. The setup actually works fine, and with a few hiccups (ASP.NET routing doesn't work, so I had to configure mod_rewrite instead), my site is working OK.


One of the advantages to hosting on a pure IIS server is that it monitors filesystem activity, and when a page or assembly is modified, it reloads that file.


This doesn't work with an Apache front-end, so the quickest workaround is to touch web.config.


That's fine for forcing a re-read of a file, but if you need to clear the cache, or you have static variables that are persisting data and you want them cleared, you need to unload the running assembly.


Alberto Venditti[^] wrote an excellent article, Recycling IIS 6.0 application pools programmatically[^] which proposes one programatic way to recycle the application pools; however, his approach requires knowing the name of the site as it is configured in IIS, and some other information to which you might not have access.


My approach is simpler, and consists of a short Web Form:


ASP.NET
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="recycle.aspx.cs" Inherits="utility_recycle" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Unload AppDomain</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>Recycling... <%= message %></div>
    </form>
</body>
</html>

C#
using System;
using System.Web;

public partial class utility_recycle : System.Web.UI.Page
{
    public string Message;

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            HttpRuntime.UnloadAppDomain();
            Message = "Success";
        }
        catch (Exception ex)
        {
            Message = "Failed: " + ex.Message;
        }
    }
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Engineer Robotic Assistance Devices / AITX
Canada Canada
Yvan Rodrigues has 30 years of experience in information systems and software development for the industry. He is Senior Concept Designer at Robotic Assistance Devices

He is a Certified Technician (C.Tech.), a professional designation granted by the Institute of Engineering Technology of Ontario (IETO).

Yvan draws on experience as owner of Red Cell Innovation Inc., Mabel's Labels Inc. as Manager of Systems and Development, the University of Waterloo as Information Systems Manager, and OTTO Motors as Senior Systems Engineer and Senior Concept Designer.

Yvan is currently focused on design of embedded systems.

Comments and Discussions

 
-- There are no messages in this forum --