2009-01-02 95 views

回答

12

如果这是.NET 2.0或更高版本,那么您可以添加一个“App_offline.htm”文件,向服务器发出请求,将其删除,然后向服务器发出另一个请求。

只要app_offline.htm文件存在于文件夹中,这一系列事件就会强制ASP.NET卸载应用程序。

斯科特Guthrie的就可以了博客条目: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

+0

不会让系统离线。我希望它重新启动/重新加载干净的缓存/会话等。当我删除app_offline.htm时,这会默认恢复它? – MikeJ 2009-01-02 19:47:46

6

您也可以停止并启动与应用程序关联的应用程序池。

+0

但这是来自IIS的权利。在某些情况下,我可能无法访问IIS框,因此我正在寻找某种程序化的东西。 – MikeJ 2009-01-02 19:48:26

+1

您可以使用WMI回收应用程序池:http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling-Application-Pools-using-WMI-in-IIS-6.0.aspx – Portman 2009-01-03 03:14:50

+0

很酷。我不知道 – MikeJ 2009-01-03 03:38:46

22

从应用程序中触摸web.config文件是一个坏主意,海事组织。此外,有一个你修改的文件的想法是一个小黑客,国际海事组织。

的文件明确规定,UnloadAppDomain将关闭应用程序:

UnloadAppDomain允许使用的应用程序编程关机。

您应该可以在应用程序的任何位置进行此调用。请注意,您可能会得到SecurityException,因此请确保运行时为您提供适当的权限(您可能希望将其放入库中并拨打电话,然后在GAC中将该库设置为具有充分信任的证据) )。

0

如果您不想停止并启动应用程序池,则可以随时回收它。

2

通过在应用程序目录下运行时创建或重命名文件夹,可以安全地重新启动Web应用程序。很明显,您需要为分配给用户运行应用程序“修改”Web目录或其下的子目录的权限。

该方法在 http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

提到我用下面的代码来执行它在我的情况。修改它在“可写”子目录上工作

protected void RestartButton_Click(object sender, EventArgs e) 
{ 
    //restart web app (instead of iisreset) 
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart")); 
    if (dir.Exists) 
    { 
     Directory.Move(dir.FullName, dir.FullName + "ed"); 
    } 
    else 
    { 
     DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted")); 
     if (dired.Exists) 
     { 
      Directory.Move(dired.FullName, dir.FullName); 
     } 
     else 
     { 
      Directory.CreateDirectory(dir.FullName); 
     } 
    } 
} 
7

此代码适用于我。只需调用它来重新加载应用程序。

System.Web.HttpRuntime.UnloadAppDomain(); 

Read more

这种方法只会卸载我们的应用程序。如果你只是把这个方法放在一个ASP.NET web按钮中,那么你完全完成了。那么我们的应用何时会重新加载?实际上,如果你点击你的按钮,它会首先启动我们的方法和卸载应用程序。进一步在我们在那个时候的网页上也会被重新加载,因为我们只是点击一个按钮并且网页应该刷新。启动我们的方法后,页面刷新过程也会导致我们的应用程序重新加载。

相关问题