在.NET Framework中,有很多种技术可以创建基于http协议的服务,譬如说web service, wcf,wcf rest和web api等等。网上有很多的文章教我们如何开发、使用这几种技术,但是没有说明他们之间的关系,经过一段时间的查阅资料,现将我的理解整理如下。
web service:
- 基于SOAP,仅仅支持http协议。
- 数据传输格式是xml。
- 只能部署在iis上面。
wcf:
- 基于soap,支持多种传输协议,如http,https,tcp,msmq和命名管道等等。
- 数据传输格式是xml。
- 服务配置比较繁琐。
- 可以host在应用程序、iis或者windows service中。
wcf rest:
- 需要配置webHttpBindings节点。
- 数据传输格式可以是xml、json、atom等。
- 默认支持http get和post操作,可以通过在iis中对可接受的request进行额外的配置来支持更多http操作,譬如说put、delete等等。
- 通过webGet方式来传参,则必须指定UriTemplate模版。
web api:
- 是一种轻量级的构建http服务的框架,是在.NET平台下构建restful web service的理想框架。
- 和wcf rest service相比,web api提供http的全部特性,如URIs、request/response headers、 caching、versioning、various content format。
- 同时支持mvc的特性。
- 能host在应用程序和iis中。
- 适用于各种不同的客户端,譬如浏览器、手机app、pc端应用等等。
- response被序列化成json、xml或者其他种类的格式。
何时使用wcf或者web api:
- 如果有如下特殊场景:单向消息、消息队列、双工通信等等,请使用wcf。
- 当传输通道不局限于http的时候,譬如更想支持tcp、udp等,推荐使用wcf。
- 当要创建面向资源的服务或者希望支持http的全部的特性的时候,推荐使用web api。
- 当需要支持多种客户端时,推荐使用web api。