面試被問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