Generally we all use cache to improve our website's performance. Caching is really useful when we are frequently displaying data which rarely requires changes. But, sometime client request an immediate change in cache entries and we have no option to manually run IISReset or change the contents of web.config file to clear all the cache.
In below code, I am sharing different approaches which can help you:-
namespace Utilities.General
{
public static class Utility
{
public static bool RestartAppPool()
{
//First try killing your worker process
try
{
//Get the current process
Process process = Process.GetCurrentProcess();
// Kill the current process
process.Kill();
// if your application have no rights issue then it will restart your app pool
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Try unloading appdomain
try
{
//note that UnloadAppDomain requires full trust
HttpRuntime.UnloadAppDomain();
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Finally automating the dirtiest way to restart your application pool
//get the path of web.config
string webConfigPath= HttpContext.Current.Request.PhysicalApplicationPath + "\\web.config";
try
{
//Change the last modified time and it will restart pool
File.SetLastWriteTimeUtc(webConfigPath, DateTime.UtcNow);
return true;
}
catch (Exception ex)
{
//if exception occoured then log exception
Logger.Log("Restart Request Failed. Exception details :-" + ex);
}
//Still no hope, you have to do something else.
return false;
}
}
}
To implement above case you can create a dummy page i.e. RestartApplication.aspx or add a querystring parameter to your existing page like Home.aspx?RestartPool=true. Feel free to share your thoughts with me. Happy Codding !!!