使用app.config配置卷影复制

时间:2011-09-30 10:23:26

标签: c# service appdomain appdomainsetup

让我先解释一下情景。

我已经从一个安装基础安装了多个服务副本(Say 10)。现在我想更新其中一个dll。我需要停止所有服务,更新dll并重新启动服务。

为了避免这种情况,我在代码中使用了ShadowCopying。这样可以在不停止所有服务的情况下更新dll。它如下。

static void Main(string[] args)
{
    AppDomain.CurrentDomain.SetCachePath(@"C:\Cache");
    AppDomain.CurrentDomain.SetShadowCopyPath(AppDomain.CurrentDomain.BaseDirectory);
    AppDomain.CurrentDomain.SetShadowCopyFiles();

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
        { 
            new SampleService(serviceName) 
        };
    ServiceBase.Run(ServicesToRun);
}

现在我正在尝试从Asp.Net

获得相同的via app.config文件,如下所示
<hostingEnvironment 
    idleTimeout="Infinite" 
    shutdownTimeout="30" 
    shadowCopyBinAssemblies="true" />

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

ASP.Net托管环境内置支持管理应用程序回收。

Windows .Net服务使用没有此支持的标准CLR主机。你必须实现自己的例如。

  1. 创建一个子AppDomain来托管您的服务代码,并配置卷影复制。
  2. 使用类似FileSystemWatcher的内容来监控原始bin目录。
  3. 当文件发生变化时,请拆除AppDomain并创建一个新文件并重新加载。
  4. ASP.Net主机在这些方面做了一些事情(但也有能力管理现有请求,在此过程中排队新请求等)。