面试被问WCF与WebApi的区别,顿时汗如雨下,之前还真没太了解过,特记录一下!
一、WebService、WCF、WCFRest、WebApi的异同
WebService:
基于SOAP,返回Xml数据。
只支持HTTP协议。
不开源,但是可以被任何识别Xml的客户端调用。
只能寄宿在IIS下。
WCF:
基于SOAP,返回Xml数据。
是WebService(ASMX)的进化版,支持TCP、HTTP、HTTPS、Named Pipes、MSMQ等各种的协议。
WCF最大的问题是它繁琐和大量的配置。
不开源,但是可以被任何识别Xml的客户端调用。
可以寄宿在应用程序、IIS或者服务中。
WCF Rest:
想使用WCF Rest service,必须使用webHttpBindings。
通过使用[WebGet]和[WebInvoke]属性,实现HTTP的GET和POST。
要想使用其他的HTTP请求方式,需要在.svc文件中做一些配置,使IIS可以接受这些特殊的请求。
使用WebGet通过参数传输数据,也需要配置,而且必须指定UriTemplate。
支持XML、JSON以及ATOM等数据格式。
Web API:
这是一个可以简单、容易构建HTTP服务的新框架。
WebAPI是在 .NET Framework上构建REST-ful服务开源的理想平台。
与WCF Rest serivce不同,WebAPI具有Http所有的特点(像 URIs,Requet/response headers/caching/versioning/various content formats)。
WebAPI 也支持一些MVC的特性,像routing,controller,action,results,filter,model binders,IOC container or DI,unit testing,使得它更简单、健壮。
可以寄宿在应用程序或IIS中。
它是轻量级的架构,对具有有限宽带的设备比较友好,比如智能手机。
二、选择WCF还是WebAPI?
1.当你想创建一个支持像消息、消息队列、双工通信等特殊情况的服务时,选择WCF
2.当你想创建一个可以使用快速传输通道(如TCP、命名管道、甚至UDP(WCF4.5),当其他传输通道禁用的时候也能支持HTTP)的服务时,选择WCF
3.当你想创建一个基于HTTP,可以使用HTTP的全部功能(如URI,请求/响应标头,缓存,版本控制,各种格式的内容)的面向资源的服务时,选择WebAPI
4.当你想把你的服务暴露给包括浏览器、手机、iphone和平板电脑等比较广泛的调用端时,选择WebApi
参考文章:Difference between WCF and Web API and WCF REST and Web Service