一个【在客户端重启站点后台】的简单方法

        有着连续后台的ASP.net站点,有时候需要让用户自助地重启整个站点程序(例如后台出现异常或者需要重新初始化时)。用户只需点击页面上一个按钮,站点应用将自行回收并重启(Application_Start也将被执行)。

        实现这一功能至少有两种方法。一是使用DirectoryEntry通过虚拟路径定位并操作应用程序池,但是这种方法对IIS版本有一些要求,并且应用程序池一旦回收,后台也就停止,直到站点收到下一次页面请求时才回执行Application_Start(Application_Start被执行是站点后台启动的必要条件)。于是有了第二种方法,通过系统服务,先回收站点,然后再模拟访问站点某一页面使后台启动。

        如何更简单地实现这一功能?既不安装守卫服务,还适用于任意版本的IIS?我在对IIS自动回收机制的了解中,得知当站点某些重要文件发生更改时,应用程序将自动回收,于是准备从这个方面入手。经过一些尝试,顺利实现了后台的重启。

 代码如下:

 public static void RestartSystem()
{
    try
    {
        String Path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;//获取当前站点Config文件路径
        Byte[] Buffer = File.ReadAllBytes(Path);//读取Config文件
        File.WriteAllBytes(Path, Buffer);//原样写回
        //此时,站点应用程序被收回,后台当然也就停止了
    }
    catch { }  

    HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.ToString());//客户端重新加载本页
    //此时,Application_Start被执行,后台启动
}

然后在页面控件的postback事件响应函数中直接调用RestartSystem函数即可。

当然这只是个雕虫小技,但是它确实达到了我的功能要求。仅供大家参考。

你可能感兴趣的:(ASP.net,开发笔记)