如何构建公开业务层的WCF服务?

时间:2009-03-30 00:29:09

标签: wcf

WCF通过使用接口和合同等来促进良好的设计。令我感到困惑的是,例如在我的情况下,如果我有两套业务功能,如ICustomerMgmtBIZ 和IProductMgmtBiz。如果这两个是ServiceContracts,我有一个像

这样的界面

IBusinessService:IProductMgmtBIZ,ICustomerMgmtBIZ

和实现类BusinessService。我看到BusinessService类将有太多的实现。到目前为止,我一直在使用的解决方法是实现部分类。

如此坦率地说,WCF服务只能有1个实现和1个服务契约吗?

2 个答案:

答案 0 :(得分:3)

不,可以在WCF服务类型(使用ServiceBehavior属性归属的类)上实现多个服务合同,因为这只是让类实现多个接口的问题。如果您使用的是任何Visual Studio模板或其他类型的代码生成器,则可能无法立即清除。但是,虽然您可以在服务类型上实现多个服务契约接口,但如果您需要服务(在这种情况下可能是单例(?)),它对您的服务行为起作用并不是很好。 IBusinessService意味着您需要从一个客户端代理调用所有服务的功能,以便所有操作可以在相同的逻辑会话中运行(类似于ASPX Web会话)。如果不是这种情况,那么您可以自由地为每个合同接口定义单独的代理,但这也需要您为每个合同支持一个端点。

绝对要求您只能在WCF ServiceHost实例上进行实施吗?哪些因素会影响您的决定?

顺便说一句,部分课程不再麻烦我了。现在将代码拆分成多个文件的想法似乎很自然。例如,除了将核心逻辑存储在ServiceType.cs中之外,在ServiceType_IProductMgmtBiz.cs和ServiceType_ICustomerMgmtBIZ.cs等文件中存储部分类似乎很自然。

最后,以下问题可能有用...... WCF and Interface Inheritance - Is this a terrible thing to do?

答案 1 :(得分:1)

直言不讳,没有 - 是的,是的,但是。任何解决方法都不是最佳的,包括使用“IBlank”作为主WCF接口(接口来自IBlank)和两个端点,一个实现IProductMgmtBIZ,另一个实现ICustomerMgmtBIZ。我没有在我面前使用我的开发机器,这可能涉及其他一些重写。所以,在WCF级别,除非你想拥有两个WCF ServiceHosts(这是完全合理的),否则你会被搞砸。

简而言之,解决方法不够优雅。在同一端口上使用不同的扩展名更容易拥有两个WCF端点。