让我先解释一下情景。
我已经从一个安装基础安装了多个服务副本(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" />
有什么建议吗?
答案 0 :(得分:2)
ASP.Net托管环境内置支持管理应用程序回收。
Windows .Net服务使用没有此支持的标准CLR主机。你必须实现自己的例如。
AppDomain
来托管您的服务代码,并配置卷影复制。FileSystemWatcher
的内容来监控原始bin目录。AppDomain
并创建一个新文件并重新加载。ASP.Net主机在这些方面做了一些事情(但也有能力管理现有请求,在此过程中排队新请求等)。