Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除了修改web.config外,如何重新启动asp.net应用程序_C#_Asp.net_Restart - Fatal编程技术网

C# 除了修改web.config外,如何重新启动asp.net应用程序

C# 除了修改web.config外,如何重新启动asp.net应用程序,c#,asp.net,restart,C#,Asp.net,Restart,除了从应用程序内部触摸web.config之外,是否有推荐的方法可以跳出asp.net应用程序?是HttpRuntime.UnloadAppDomain();这样做的首选方法是什么?如果是这样,你在哪里做这件事?在卸载页面或应用程序中的其他位置时?您也可以停止和启动与应用程序关联的应用程序池。如果这是.NET 2.0或更高版本,则您可以添加“app\u offline.htm”文件,向服务器发出请求,将其删除,然后向服务器发出另一个请求 只要文件夹中存在app_offline.htm文件,此事件

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

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

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

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

Scott Guthrie的博客文章:

在应用程序内部触摸web.config是一个坏主意,依我看。此外,在我看来,拥有一个修改过的文件是一个小小的恶作剧

文档中特别说明了将关闭应用程序的:

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


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

如果您不想停止和启动应用程序池,您可以随时对其进行回收。

您可以通过调用HttpRuntime.ShutdownAppDomain方法来实现这一点(您需要使用反射来调用它,因为它是一个私有静态方法)


有关如何在“重新启动”REST API中使用此方法的示例,请参见。通过在运行时在应用程序目录下创建或重命名文件夹,可以安全地重新启动web应用程序。显然,您需要为分配运行应用程序的用户授予对web目录或其下的子目录的“修改”权限

该方法在

在我的案例中,我使用了以下代码。修改它以在“可写”子目录上工作

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);
        }
    }
}

这个代码对我有用。只需调用它来重新加载应用程序

System.Web.HttpRuntime.UnloadAppDomain();

此方法将卸载我们的应用程序。如果您只是将此方法放在ASP.NET web按钮中,您就完全完成了。那么,我们的应用程序何时重新加载?实际上,如果您单击按钮,它将首先启动我们的方法并卸载应用程序。我们此时所处的网页上的其他内容也将被重新加载,因为我们只需单击一个按钮,网页就会刷新。启动我们的方法后,页面刷新过程也会导致应用程序重新加载


对这就是我问的原因。web.config的修改看起来很难看,可能会让我们在Dailywtf.com上写下来:)我认为更好的一句话应该是:“终止当前应用程序。下次收到请求时,应用程序会重新启动。”引用中的“未使用”部分可以理解为“只有在没有人使用它时才会关闭”,事实并非如此。请使用System.Web.HttpRuntime.UnloadAppDomain()将系统脱机。我希望它重新启动/重新加载干净的缓存/会话等。当我删除app_offline.htm时,默认情况下这将使其恢复运行?@MikeJ-否。它将关闭应用程序并从服务器卸载应用程序域,直到文件被删除。@MikeJ-还请注意,这不是程序性更改。您需要实际添加和删除该文件才能使其工作,但这是从IIS开始的。在某些情况下,我可能无法访问IIS框,因此我正在寻找程序化的内容。您可以使用WMI回收应用程序池:这将使用相同的应用程序池回收每个应用程序。这对我不起作用。我看到正在创建目录,但未调用应用程序启动事件!Bart Lannoeye链接似乎很好地工作,这绝对是这里给出的最简单的解决方案!