【发布时间】:2014-02-17 15:15:34
【问题描述】:
如何在一个地方托管来自不同 wcf 库的服务?
假设我有 2 个 WCF 库 dll,如下所示
.DLLA
Public Class clientA : InterfaceA
.DLLB
Public class clientB : InterfaceB
两个接口都有服务契约属性和它们自己的操作契约。 我将这两个 dll 放在一个共享文件夹中,这样我就可以动态加载它们并将它们作为服务托管
现在我想创建一个“AutoHosting”控制台应用程序作为中间层,但只使用一个 ServiceHost 来托管这两个服务并分配相同的 UriListen。
PS:我也希望解决方案尽可能灵活。比如以后我添加DLLC,希望ServiceHost可以在不修改“AutoHosting”部分的情况下自动获取DLLC服务
如果有最好的方法,请告诉我。
【问题讨论】:
-
要做到这一点,两个人中的一个需要做一些“额外的工作”。 DLL 的创建者需要编写它,以便可以在 app.config 中没有配置设置的情况下运行服务(无论是硬编码值还是备用配置文件位置),或者 DLL 的用户需要修改他的配置文件DLL 的已发布端点的设置。你想做什么,每个人的解决方案都略有不同。
-
也有可能 DLLA 和 DLLB 都可以引用单个项目,该项目可以定义主“插件接口”,DLL 需要在一个类中实现该主“插件接口”,该类可以返回诸如名称之类的信息他们发布的类和接口在 DLL 中可用。
-
斯科特,感谢您的回复。但这很好,因为需要添加 50 多个 dll,所以如果需要额外的工作,我们会这样做。我从网上找到的唯一解决方案是使用部分类,但我不想使用它,因为每次添加一些服务或接口时,我都需要重新编译我的 dll
-
"****还有可能 DLLA 和 DLLB 都可以引用一个可以定义主“插件...”的项目删除/添加新 dll 时需要重新编译
-
不,你不能这样做。一个
ServiceHost承载正好一个 服务实现类。唯一的选择是拥有一个实现多个服务契约(多个接口)的服务实现类。