程序集替换和类继承

本文关键字:继承 替换 程序集 | 更新日期: 2023-09-27 17:49:36

一个名为Portal.WebServices.TaskListService的WCF服务使用一个隐藏代码文件TaskListService.svc.cs。在这个文件中声明一个名为TaskListService的类型,它继承自类型TaskListServiceBase。并实现了一个名为ITaskListService的接口。所以:

TaskListService: TaskListServiceBase, ITaskListService
   ^                     ^                  ^   
   |                     |                  |
 application               separate assembly 

我想在web服务器上部署TaskListService 一次,并将TaskListServiceBase和接口放入由承载TaskListService的应用程序引用的单独的程序集。因此,当我想在web服务中添加、删除或更新功能时,我只需要将新的程序集复制到应用程序的bin文件夹中。

由于这发生在运行时,我想知道是否有任何惩罚或警告对于这种做法(除了使用编译时间常量等),或者如果这种情况甚至是可能的,或者是否有更好的实践来做这件事。

所以基本上,我的问题是:我想更新功能到WCF服务,而不重新部署整个应用程序,只有更新的程序集

(是的,我觉得这里有点愚蠢)

程序集替换和类继承

在另一个程序集中分离接口和基类是可能的,也是正确的(分离的接口是一种模式,它只对接口进行描述,同样的模式也适用于基类)。

关于部署,您可以这样做,因为程序集是由IIS影子复制的。但是,一旦复制了新的程序集,我假设您必须回收应用程序,以便加载新的程序集。

我为一个Windows服务手动做了这个,它启动了一个独立的AppDomain并启用了影子复制,所以我可以远程更新程序集并强制重新启动服务。

这是我遵循的做法,据我所知没有任何缺点,只有好处。我更进一步,因为我不使用后面的代码。因此,在上面的例子中,TaskListService.cs将存在于ServiceImplementations程序集中,与ServiceContracts程序集中分开。

如果需要的话,这允许你将你的契约/实现分解成多个程序集(可能是由域分开的),并独立更新它们。