程序集替换和类继承
本文关键字:继承 替换 程序集 | 更新日期: 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
程序集中分开。
如果需要的话,这允许你将你的契约/实现分解成多个程序集(可能是由域分开的),并独立更新它们。