除了修改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。另外,拥有一个你修改过的文件的想法有点哈哈尼,IMO。
该文档明确指出 UnloadAppDomain
将关闭应用程序:
UnloadAppDomain允许以编程方式关闭未使用的应用程序。
您应该可以在应用程序的任何位置进行此调用。请注意,您可能会收到 SecurityException
,所以请确保运行时为您提供适当的权限(您可能希望将其放入库中并进行调用,然后在GAC中设置库,并提供证据以使其完全信任。)
这段代码对我有用。只需将其调用即可重新加载应用程序。
System.Web.HttpRuntime.UnloadAppDomain();
此方法只会卸载我们的应用程序。如果您只是将此方法放在ASP.NET Web按钮中,那么您就完成了。那么我们的申请什么时候重新加载?实际上,如果您单击按钮,它将首先启动我们的方法并卸载应用程序。此时我们正在进行的网页上也会重新加载,因为我们只需点击一个按钮就可以刷新网页。启动我们的方法后,页面刷新过程也会导致我们的应用程序重新加载。
您也可以停止并启动与该应用关联的应用池。
您可以通过调用 HttpRuntime.ShutdownAppDomain 方法来执行此操作(您需要使用反射来调用它,因为它是一个私有静态方法)
请参阅如何重新启动IIS工作进程以编程方式(即关闭当前的ASP.NET域),以获取如何在“重新启动”REST API中使用此方法的示例
您可以通过在应用程序目录下的运行时创建或重命名文件夹来安全地重新启动Web应用程序。显然,您需要为分配给运行应用程序的用户“修改”提供帮助。对web目录或其下的子目录的权限。
该方法在提到 http://www.bartlannoeye.be/博客/重启-A-.NET的网络的应用程序,而无需-重启-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);
}
}
}
如果您不想停止并启动应用程序池,您可以随时回收它。