除了修改web.config之外,如何重启asp.net应用程序

除了从应用程序内部触摸web.config之外,是否有推荐的方法来反弹asp.net应用程序? 是HttpRuntime.UnloadAppDomain() ; 这样做的首选方式是什么? 如果是这样,你在哪里这样做? 在卸载页面或应用程序中的其他位置?

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

只要app_offline.htm文件存在于文件夹中,此事件序列将强制ASP.NET卸载应用程序。

Scott Guthrie的博客文章: http : //weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

从应用程序内部触摸web.config是一个坏主意,IMO。 此外,拥有一个你修改的文件的想法是一个小hackney,IMO。

该文档明确指出UnloadAppDomain将关闭应用程序:

UnloadAppDomain允许以编程方式关闭未使用的应用程序。

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

这段代码对我有用。 只需将其称为重新加载应用程序。

 System.Web.HttpRuntime.UnloadAppDomain(); 

阅读更多

这个方法只会卸载我们的应用程序。 如果您只是将此方法放在ASP.NET Web按钮中,那么您就完成了。 那么我们的申请什么时候重新加载? 实际上,如果单击按钮,它将首先启动我们的方法并卸载应用程序。 此时我们正在进行的网页上也会重新加载,因为我们只需点击一个按钮就可以刷新网页。 启动我们的方法后,页面刷新过程也会导致我们的应用程序重新加载。

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

您可以通过调用HttpRuntime.ShutdownAppDomain方法来执行此操作(您将需要使用reflection来调用它,因为它是一个私有静态方法)

有关如何在“重新启动”REST API中使用此方法的示例,请参见如何以编程方式重新启动IIS工作进程(即关闭当前的ASP.NET域)

您可以通过在应用程序目录下的运行时创建或重命名文件夹来安全地重新启动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); } } } 

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