2010-09-08 24 views
5

我有一个wcf服务,可以在单个端点地址上公开大量的服务方法。到目前为止,所有服务方法都是在一个服务合同类中实现的。这个服务契约类实现了几个服务契约接口。现在我想将服务合同方法的实施分成几个阶段,以避免合同阶层不断增长。我使用ServiceHost的自托管方案。 ServiceHost只采用一种实现服务方法的单一类型,所以似乎所有的东西都必须在这个类中实现。当然,这些方法的肉可以分解成几个类。但是,还有一种方法可以将方法拆分为几个类?WCF在单个端点地址处的大型接口

回答

5

您可以将该服务实施为partial class,该服务可让您将实施分割为多个文件。

如果要求保持单个端点和单个接口,那么就没有其他方式将其分开 - 您创建的一个类必须实现所有接口。

我会建议保持服务实现尽可能简单,并且每个方法都是一个单行代码,将操作委托给实际实现,然后可以将其分解为多个类。也许每个操作都做一个也是有道理的?这是我以前用过的成功模式。

+0

谢谢您的回复。我也考虑过部分课程,但在我看来,部分课程并不能帮助简化解决方案。我会按照您的建议去使用,每个操作使用一个班轮 – WalterOesch 2010-09-10 21:26:26

0

您可以根据需要创建任意数量的服务合同,每个服务合约都有自己的逻辑。

这种方法的好处在于,您似乎希望将逻辑上相关的功能组合在一起。

不利的一面是调用客户端现在必须知道调用函数时要使用哪个服务。

0

限制服务中操作的数量是一种很好的方法。正如我现在理解你的场景,你有单一的服务实现,它实现了几个服务合同。这意味着您的服务中已经有多个端点 - 每个端点都暴露单一合同。在这种情况下,您的客户已经准备好为每个需要的合同创建单独的代理。

现在你想在多个服务实现中划分你的服务实现类。每个服务实施将实施一个(或更小的一组)服务合同。这将需要修改您的托管应用程序 - 每个服务实现您都需要单独的ServiceHost。您还需要单独配置和每个服务实施的唯一地址。

客户端可以重新创建新的服务,但我认为它也应该可以简单地更改端点的地址,它应该工作。

+0

谢谢您的回复。我目前正在计划和实施一个相当大的系统的数据交换接口。客户很可能总是使用可能运行于不同平台的整个界面。在这样的情况下,我认为客户端只需要一个端点地址是最简单的。我创建了几个服务契约接口,让一个“主接口”继承自所有服务契约接口。然后servcice合同类实现主接口。 – WalterOesch 2010-09-10 21:32:53