WCF单个终结点地址下的大型接口

5
我有一个WCF服务,在单个端点地址上公开了相当多的服务方法。到目前为止,所有服务方法都在一个服务契约类中实现。该服务契约类实现了几个服务契约接口。现在我想将服务契约方法的实现拆分为几个类,以避免契约类变得过大。我使用自托管方案和ServiceHost。ServiceHost只接受实现服务方法的单个类型,因此似乎所有内容都必须在此类中实现。当然,方法的主体可以拆分为几个类。但是是否还有一种方法可以将方法拆分为几个类?
3个回答

5
你可以将服务实现为partial class,这样就可以将实现分成多个文件。
如果要保持单个终结点和单个接口,则没有其他方法可拆分它-您创建的一个类必须实现所有接口。
我建议尽可能简化服务实现,并将每个方法作为将操作委托给实际实现的一行代码,然后可以将其拆分到多个类中。也许对于每个操作都制作一个类甚至有意义?这是我以前成功使用过的模式。

谢谢您的回复。我也考虑过部分类,但我认为部分类并不能帮助保持解决方案的简单性。我会按照您建议的方式,为每个操作使用一行代码。 - WalterOesch

0
您可以根据自己的需求创建任意数量的服务合约,每个合约都有其自身的逻辑。
这种方法的好处是,正如您所期望的那样,可以将相关功能逻辑上组合在一起。
不足之处在于调用方现在必须知道在调用函数时使用哪个服务。

0

限制服务中操作的数量是一个好方法。据我理解,您目前有一个单一的服务实现,它实现了多个服务契约。这意味着您的服务已经具有多个端点 - 每个端点公开一个单独的契约。在这种情况下,您的客户端已经准备好为每个所需的契约创建单独的代理。

现在,您想将您的服务实现类分成多个服务实现。每个服务实现将实现一个(或更小的)服务契约集。这将需要修改您的托管应用程序 - 您将需要为每个服务实现使用单独的ServiceHost。您还需要为每个服务实现提供单独的配置和唯一地址。

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


谢谢您的回复。我目前正在计划和实现一个相当大的系统的数据交换接口。客户端很可能会始终使用整个接口,并可能在不同的平台上运行。在这种情况下,我认为对于客户端来说,最简单的方法是只有一个单一的终结点地址。我创建了几个服务契约接口,并让“主接口”从所有服务契约接口中继承。然后服务契约类实现主接口。 - WalterOesch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接