WCF ServiceHost实例化与多个端点契约混淆

时间:2016-02-08 21:03:53

标签: c# .net wcf

当我有多个我要添加的端点合约时,我对WCF ServiceHost实例化的内容感到有点困惑。

实例化包含了一个typeof参数 - 这似乎是契约,在我读过和完成的所有内容中都是如此。然而,当我遇到添加额外的合同时 - 这就是我对它的困惑。

ServiceHost shost = new ServiceHost(typeof(MyService), NetTcpBinding, xyz);

因此,假设我有几个合同 - ProductService,BatchService,CustomerService这些是每个都有接口的端点合同。让我们保持简单,每个合同中都有一个Add Method和Get Method。

然后我可以将这些合同的端点添加到ServiceHost ..

shost.Endpoint.Add(ProductService);
shost.Endpoint.Add(BatchService);
shost.Endpoint.Add(CustomerService);

如果我使用MyService创建它,这是我的困惑,那么MyService是否需要合并我所有端点合同的方法,或者这只是传递第一个端点合同只是为了实例化它然后所有其他的都是(原谅我没有更好的说法) - 由我的一个端点实例化的服务提供的其他服务?

我已经阅读了SO,看起来似乎相关且接近 - 但没有给出ServiceHost实例化的解释 Run WCF ServiceHost with multiple contracts

我的意思是实例化这个东西是什么意思;如果你必须将所有的端点方法放入主合同中,那么你可以为合同指定命名空间......然后添加端点.-这似乎是不可能的。is the answer found at the link真的是可行的答案(闻起来WET~W'peat Every Thing - AKA not dry]。

1 个答案:

答案 0 :(得分:2)

ServiceHost可以托管一项服务 - 即一个服务类(实施类)。但是,单个班级可以实施多个 WCF服务合同。

因此,如果您有三个服务合同(作为接口IProductServiceIBatchServiceICustomerService)和一个实现所有这三个接口合同的单个MyServiceClass

public class MyServiceClass : IBatchService, ICustomerService, IProductService

然后您可以在ServiceHost中托管此类,并且可以为这三个服务合同中的每一个定义端点。