wcf必知必會以及與Webapi的區別

快速閱讀

介紹wcf中的信息交換模式MEP以及數據在傳輸過程當中的序列化,endpont的介紹和wcf的三種實例模式以及安全模式 以及和Webapi的簡單對比。html

wcf介紹

支持跨平臺。web

支持多種協議 tcp, named pipes, HTTP, HTTPS, 消息隊列MSMQjson

支持部署在IIS,應用程序或windows服務等windows

配置比起比較麻煩,定義各類協議,契約,以及行爲。api

HTTP協議與TCP協議的比較

TCP對應於傳輸層 通常流媒體用的多。瀏覽器

http是對應於應用層,是創建在tcp基礎之上。 http鏈接是會選創建tcp鏈接,請求完成之後,斷開與tcp的鏈接 。是一種無狀態的鏈接 ,網頁的請求服務通常會用http鏈接安全

信息交換模式MEP

包括單工通訊,雙工通訊和請求應答服務器

  1. 單工通訊:只發送不接收。 好比告訴消息讓你排隊。不但願接收到消息session

  2. 雙工通訊:客戶端和服務端均可以發送和接收。好比發佈訂閱模式就是採用雙工。tcp

  3. 請求應答:用的最多,客戶端發送請求,同步等待返回結果 。

數據序列化

數據要序列化之後才能傳輸,因此傳輸的數據必須先序列化以才能傳輸

  1. 類上加 [Serializable] 表示使用的Soap序列化傳輸,

  2. 類上加【XmlSerializeFormat】,字段上加[XmlElement,XmlAttribute]表示使用的是xml序列化。若是model是第三方提供的,能夠用這種方式傳輸[XmlSerializeFormat]

  3. 類上加Datacontract,字段上加DataMember表示使用的是DataContract序列化,這種序列化比xmlserialize快,

  4. DataContractJsonSerializer 也支持json序列化。 對接收到的數據直接調用DataContractJsonSerializer轉爲json

Endpoint

客戶端與服務端經過Endpoint進行交互 ,Endpoint的三要素ABC, Address表示服務器地址,Binding表示選擇哪一種傳輸的協議(TCP,http,ssl, soap)Contract契約(服務、操做、數據Contract)表示消息包含的內容 以及信息交換模式(one-way單工模式, duplex 雙工械, request/reply請求響應模式)

wcf的實例模式

  1. Per call :每次調用都會建立一個實例。能有效利用內存,但須要特別手段維護Session

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Percall)]
  2. Per session :每一個用戶的整個會話期創建一個session

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
  3. Single:單例模式,全部用戶共享一個session

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]

wcf安全模式

主要是傳輸安全,包括

傳輸層安全

和消息層安全

https://www.cnblogs.com/artech/archive/2011/05/22/authentication_01.html

webapi

  1. 能夠把服務暴露給一系列客戶端,包括瀏覽器,手機和平板
  2. 可使用http全部特徵,如URI,request/response header.
  3. 能夠支持多種數據格式 xml, json, text

如何選擇

若是應用須要支付 消息隊列和全雙工通訊則必需要用wcf ,

但若是要用到http的一些特徵,好比request, response, 及多不一樣客戶端時須要用到webapi .

友情提示

​ 我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的問題。能夠直接在公衆號《愛碼農愛生活 》留言。一定會再次複查緣由。讓每一篇 文章的流程都能順利實現。

相關文章
相關標籤/搜索