2015-05-10 105 views
2

我已经看到的所有WCF服务都是一个单独的“上帝”界面/类与一堆方法。如果我想要另一个模块,我总是创建一个新的服务。WCF服务可以像WEB API服务那样模块化吗?

使用WEB API我不必这样做,因为我可以开发几个负责不同功能的控制器。

WCF服务是否真的是一个这样的'上帝'类与许多方法或我错过了什么?

我读过WCF和WEB API之间的许多比较,但是我没有看到它们中任何一个提到的这一点。

回答

1

您可以使用c#partial修饰符来模拟WebAPI中的一组控制器。但是这可能会使项目中的大量文件增加一倍,因为需要在WCF中有一个接口及其实现(如果将它们分开)。

1

我会假设当你说“WCF服务”时,你指的是一个SOAP服务。因为WCF也支持REST风格的服务。

不管你喜欢,你都可以开发一个WCF服务。

一个区别是WEB API服务不公开关于他们自己的元数据。如果您添加(或删除)控制器,则它不会影响发送到请求客户端的元数据,因为无。

如果您添加或删除服务合同,或者从现有服务合同中添加或删除操作,则可以更改客户端可用的元数据。其中一些客户端可能会中断(像PHP这样的客户端在运行时使用元数据),或者可能根本无法使用新的服务合同(因为他们没有代理类来匹配它)。

1

通过架构,WCF服务比WEB API服务更“模块化”。你已经看过一个单一的“上帝”界面/类与一堆方法,可能是因为之前的开发人员可能通常具有以下弊端。所有方法都是在相同装配

  • 混合接口和实现

    1. 一个接口如果软件架构设计合理,大多数或所有业务逻辑应在具有模型类封装没有与WCF或Web API的联接,所以您Web API或WCF的代码应该很薄。

  • +0

    @John,这是通过设计,尽管在实践中,已经有越来越多的B2B Web服务通过Web API/RESTful实现。更确切地说,它是您的商业模式和运营模式决定使用哪种技术。我提到B2B和B2C的意图是提高商业模式和运营模式的意识,但这可能在这样的问答论坛中脱节。 – ZZZ

    +0

    你是对的约翰。刚刚删除提到b2b b2c。 – ZZZ