任何人都可以分享 WCF 服务和 ASP.NET Web Api 之间的实际区别吗?在哪种情况下我们必须使用 WCF 服务和 ASP.NET Web Api。
3 回答
WCF Web API 是微软的下一代服务框架。
WCF 服务最初设计为具有通道体系结构,允许自定义用于在系统之间进行通信的协议和传输。虽然这为架构师/开发人员构建可互操作的应用程序提供了极大的灵活性,但其代价是复杂性。配置 WCF 从未如此简单 (IMO)。
最流行的用例 (IMO) 是使用 WCF 服务通过来自浏览器的 ajax 请求为 Web 应用程序提供支持以获取更多数据。此外,自从最初引入 WCF 以来,应用程序使用 http 提供 API 已变得很普遍。
因此,新的 WCF Web API 试图简化服务基础结构并采用 http 传输协议。
如果您正在构建一个新的 Web 应用程序,我会使用新的 Web API。如果我需要使用其他 http 与另一个系统进行通信,我只会考虑使用 WCF 服务。
WCF 通道架构
http://msdn.microsoft.com/en-us/library/ms729840.aspx
WCF Web API
来自http://mattmilner.com/Milner/Blog/post/2012/02/28/WebAPI-or-WCF.aspx,关于这个问题的一篇很棒的帖子:“WCF 仍然是构建服务的框架,您关心传输灵活性. Web API 是构建您关心 HTTP 的服务的框架。”
网络服务
它基于 SOAP 并以 XML 形式返回数据。它只支持 HTTP 协议。它不是开源的,但可以被任何理解 xml 的客户端使用。它只能托管在 IIS 上。
WCF
它也是基于 SOAP 并以 XML 形式返回数据。它是 Web 服务 (ASMX) 的演进,支持 TCP、HTTP、HTTPS、命名管道、MSMQ 等各种协议。WCF 的主要问题是其繁琐且广泛的配置。它不是开源的,但可以被任何理解 xml 的客户端使用。它可以托管在应用程序或 IIS 上或使用窗口服务。
WCF 休息
要将 WCF 用作 WCF Rest 服务,您必须启用 webHttpBindings。它分别通过 [WebGet] 和 [WebInvoke] 属性支持 HTTP GET 和 POST 动词。要启用其他 HTTP 谓词,您必须在 IIS 中进行一些配置,以接受对 .svc 文件的特定谓词的请求。使用 WebGet 通过参数传递数据需要配置。必须指定 UriTemplate 它支持 XML、JSON 和 ATOM 数据格式。
网络 API
这是以简单的方式构建 HTTP 服务的新框架。Web API 是开源的,是在 .NET Framework 上构建 REST-ful 服务的理想平台。与 WCF Rest 服务不同,它使用 HTTP 的全部功能(如 URI、请求/响应标头、缓存、版本控制、各种内容格式)它还支持 MVC 功能,如路由、控制器、动作结果、过滤器、模型绑定器、IOC容器或依赖注入,单元测试使其更加简单和健壮。它可以托管在应用程序或 IIS 上。它是轻量级架构,适用于智能手机等带宽有限的设备。响应由 Web API 的 MediaTypeFormatter 格式化为 JSON、XML 或您想要添加为 MediaTypeFormatter 的任何格式。
由谁在 WCF 或 WEB API 之间进行选择
当您想要创建一个应该支持特殊场景(例如单向消息传递、消息队列、双工通信等)的服务时选择 WCF。当您想要创建一个可以使用快速传输通道(例如 TCP、命名)的服务时选择 WCF管道,甚至可能是 UDP(在 WCF 4.5 中),并且您还希望在所有其他传输通道不可用时支持 HTTP。如果您想通过 HTTP 创建面向资源的服务,可以使用 HTTP 的全部功能(如 URI、请求/响应标头、缓存、版本控制、各种内容格式),请选择 Web API。如果您希望将服务公开给包括浏览器、手机、iphone 和平板电脑在内的广泛客户端,请选择 Web API。