名为Portal.WebServices.TaskListService
的WCF服务使用代码隐藏文件TaskListService.svc.cs
。在此文件中,声明一个名为TaskListService
的类型,该类型继承自类型TaskListServiceBase
。并实现一个名为ITaskListService
的接口。所以:
TaskListService: TaskListServiceBase, ITaskListService
^ ^ ^
| | |
application separate assembly
我想在网络服务器上部署TaskListService
一次,并将TaskListServiceBase
和界面放入由单独的程序集中引用托管TaskListService
的应用程序。因此,当我想添加,删除或更新Web服务中的功能时,我只需将新程序集复制到应用程序的bin文件夹中。
由于这在运行期间发生,我想知道这种做法是否存在任何处罚或警告(除了使用编译时常量等),或如果这种情况是甚至可能,或者是否有更好的做法。
所以基本上,我的问题是:我希望在不重新部署整个应用程序的情况下更新WCF服务的功能,只更新已更新的程序集
(是的,我觉得这里有点愚蠢)
答案 0 :(得分:2)
另一个程序集中的接口和基类的分离是可能和正确的(Separated Interface是一种仅为接口描述此模式的模式,并且相同的模式适用于基类)。
关于部署,您可以这样做,因为程序集是由IIS进行阴影复制的。但是,一旦复制了新程序集,我假设您必须回收应用程序,以便加载新程序集。
我手动为Windows服务执行了此操作,该服务启用了启用了卷影复制的独立AppDomain,因此我可以远程更新程序集并强制重新启动服务。
答案 1 :(得分:1)
这是我遵循的一种做法,我知道没有任何缺点,只有好处。我更进一步,因为我不使用背后的代码。因此,在上面的示例中,TaskListService.cs将存在于ServiceImplementations
程序集中,与ServiceContracts
程序集分开。
这允许您根据需要将合同/实现分解为多个程序集(可能由域分隔)并单独更新它们。