WCF - 来自另一个程序集的服务合同

时间:2011-06-22 07:20:06

标签: c# wcf assemblies

自上周以来,我一直试着谷歌搜索答案,但没有找到任何答案。也许我只是用不正确的关键词搜索......

基本上,我们有一个正在运行的WCF服务,然后我们有一个单独的dll,其中包含另一个ServiceContract。我们想知道是否有可能在当前正在运行的服务中公开单独的dll,如果可以,如何?

我们还是WCF的新手,所以请原谅这是一个愚蠢的问题。 :(

我们正在使用.NET 3.5 SP1和C#。

此致

编辑: 我们希望将我们的服务分为“模块”。因此,服务实现(方法,等)和合同(接口)都在不同的库中。因此,假设您有一个名为“客户端”的模块。我们希望与客户端相关的所有内容都位于同一个独立的库(DLL)中,而不是从多个接口继承的一个大的基类。这是一项庞大的服务,我们需要多个开发人员同时处理同一服务的不同部分。这是我被指示要弄清楚的,但是如果它可以做到那么它就不能。我希望这会让人更加敏感吗?

3 个答案:

答案 0 :(得分:4)

假设您在询问如何在单独的DLL / Application中运行的服务中实现在一个DLL中声明的服务契约:

编辑以匹配帖子编辑

  1. 将带有服务合同的DLL的引用添加到包含服务的应用程序
  2. 在具有服务实现的.cs文件中,为服务合同的命名空间添加using语句
  3. 从服务合同中派生服务(如果您将服务合同定义为具体类而不是接口,并且您希望在服务上公开多个合同,则会遇到问题
  4. 如果自托管然后在另一个程序集中创建一个传递服务类型对象的ServiceHost,如果IIS主机创建一个引用另一个程序集中的类作为服务的.svc文件
  5. 在配置文件中添加一个服务元素,命名服务的完全限定名称
  6. 在新合同的唯一地址处为服务添加端点

答案 1 :(得分:1)

当您将另一个程序集(dll)作为“main”项目中的引用时,然后将using指令添加到实例化WCF服务的文件中。然后,您可以简单地使用引用的服务协定来设置具有正确端点和绑定(配置)的正在运行的服务。

答案 2 :(得分:0)

我想一个解决方法是你有一个主要的ServiceHost托管你的WCFMainLib,然后你的所有客户端将连接到WCFMainLib。

然后,WCFMainLib就像一个代理,连接到localhost(或其他服务器)上的所有其他WCFModuleLib以获取数据。

WCFMainlib将实现IWCFModuleLib1,IWCFModuleLib2等服务契约接口,并将它们公开给WCFClient。接口的实际实现将是对实际WCFModuleLibs的调用。

这可能会带来一些开销,但总体而言还会引入一些可能使老板或服务可用性受益的“功能”。

或者,如果您只是想委派编程工作,也许您可​​以告诉每个团队使用部分类的每个服务合同为WCFLib处理部分类,然后进行夜间编译。