我正在为我公司的CRM软件开发基于WCF的API。将来,它将用于在多个平台上开发应用程序。我知道WCF提供了命名管道,TCP和HTTP传输,但是当这些天似乎都在使用RESTful HTTP时,我是否应该为支持所有这三个的复杂性而烦恼?
答案 0 :(得分:8)
REST是Web的架构风格,而不仅仅是没有SOAP的htttp上的xml文件。
WCF是一个framweork,其唯一目的是从底层平台/协议/规范堆栈中抽象开发人员。 WCF REST是一个很糟糕的工具包,可以让你公开POX服务。
RESTfulness需要分发,缺少会话,设计自定义媒体类型或重用现有媒体类型,以及您需要考虑的许多其他属性。设计REST架构与xml ove rhttp一样多,因为设计一个SOA就是有一个肥皂信封。
答案 1 :(得分:1)
为简单起见,HTTP传输将是使用最广泛且具有最大灵活性的传输。它几乎可以在所有情况下使用。请注意,涉及开销,因此它不是最快的。总是有权衡。
答案 2 :(得分:1)
你没有意识到问过两个不同的问题。
第一个问题是,我应该使用什么传输 - HTTP,TCP或命名管道?由于您是从头开始构建新服务,我建议使用HTTP作为传输,因为您的服务将更容易通过防火墙。其他传输类型主要用于简化与可能不了解HTTP的其他服务和客户端的通信。
第二个问题是,我应该使用什么样的HTTP Web服务?我应该采用WS-*堆栈,XML-RPC模式,plain old XML(POX)还是RESTful方法?这是一个更复杂的问题。
WCF使ws- *和XML-RPC样式变得容易。 Web服务的POX样式在使用WCF进行配置时有点琐碎。使用WCF构建真正的RESTful服务非常困难 - 您必须了解WCF如何工作的基础知识并禁用它为您执行的一些“魔法”。
我认为RESTful架构风格简单且经过验证,是一个不错的选择。但是配置WCF以正确支持它很困难。如果您将WCF作为平台绑定,请考虑使用其他样式之一。
答案 3 :(得分:0)
我有一段时间没有看过Indigo,但据我记得,有些东西是RESTful HTTP不支持的,没有模拟,比如WS-Transactions,WS-Security和其他东西。如果您需要这些,则必须切换到SOAP。如果没有,REST应该对你的公司足够好。
还有性能问题。通过TCP编码为二进制XML或命名管道提供的SOAP将比基于HTTP的文本XML快一点。
另一方面,为大多数部分添加TCP和命名管道几乎是微不足道的,而且成本主要是围绕应用服务器的部署和配置。
所以,我不会从一开始就把这两个问题排除在外。在需要之前,我也不会将它们添加为功能。我要做的是确保SOAP和REST over HTTP正常运行,以便我可以选择在将来扩展(如果需要)。
答案 4 :(得分:0)
通常,您的WCF组件不应与任何内容耦合,包括传输,安全性和其他协议和技术。最终目标(可能还不是100%可能)将是编写您的服务接口和实现一次,然后能够在任何类型的环境中使用它们,而不是任何具有任何安全性的协议。所有这些都可以在配置文件和客户端应用程序中定义。