1、WCF的簡單介紹編程
Windows Communication Foundation(WCF)是由微軟發展的一組數據通訊的應用程序開發接口,能夠翻譯爲Windows通信接口,它是MS爲SOA (Service Oriented Architecture)戰略而設計的一套完整的技術框架。它是一種統一的編程模型,用來爲微軟平臺編寫分佈式(Distributed)應用。涵蓋了以前出現的多種技術,如ASMX,Remoting,MSMQ等等。安全
優勢:服務器
1.整合了多項技術,是MS SOA產品的集大成者。網絡
2.更爲簡單易用。(它囊括了關於服務的一切,不管是服務的建立,託管,消費和安全保障,仍是保護與互通,甚至是提升開發效率)架構
3.包含了 其餘技術的全部優勢(統一性,互操做性,可靠性,兼容性)併發
2、客戶端與服務的基本關係app
一、客戶端與服務框架
服務是一組向客戶端提供可用功能的端點(Endpoints)。而端點(終結點)則是網絡上的一個能將消息送達的資源。異步
客戶端按照與服務之間的契約(Contract)來格式化消息,並將消息發送給端點來訪問端點的功能。服務在端點指定的地址(Address)上監聽具備特定格式的送達消息。分佈式
二、 服務的三要素(ABC)
A:Address 意味着在哪裏(也含有傳輸方式信息)
B:Binding 意味着怎麼作(與地址的傳輸方式要匹配)
C:Contract意味着作什麼(服務契約)
三、WCF中的地址
四、元數據交換
WCF有兩種方式能夠發佈本身的元數據:
1.基於HTTP-GET協議提供元數據
2.使用MEX終結點
五、WCF體系架構
3、WCF契約
a).服務契約(SerciceContract)
公佈服務的功能。操做契約( OperationContract )則負責在方法級別公開。
b).數據契約(DataContract)
對傳遞的類對象進行XSD(XML Schema Definitions)定義,以便對其成員進行序列化。
c).消息契約(MessageContract)
自定義消息格式,包括消息頭,消息體,還能指示是否對消息內容進行加密和簽名。
d).錯誤契約(FaultContract)
自定義錯誤異常的處理方式。
4、綁定
就是預先配置好的信道棧,它表明了客戶端和服務器之間線路級別上的約定。每一個綁定都會指定通訊所用的傳輸、編碼及協議。
經過綁定,WCF封裝了各類不一樣通訊場所下所使用的配置。
綁定的組成:Name,Namespace,BindingElement
BindElement:
a)消息編碼綁定元素(Message Encoding Binding Element)
b)傳輸綁定元素(Transport Binding Element)
c)協議綁定元素(Protocal Element):
主要是包含設置事務流控制,安全,會話,排序,升級/幫助器等信息
5、信道與信道棧
信道:就是WCF應用程序之間傳送消息的通道,它負責以一種一致的方式對消息進行整理和傳送。信道被用於傳輸層,協議層及消息解惑。
信道棧:全部各層次的信道一塊兒,組成了信道棧。信道棧就是一個層次的通訊棧,專門用於處理消息。
主要包括:傳輸信道、協議信道
信道模型
a)請求響應模式(Request/Reply)
客戶端發送請求後,必須等待迴應。
1)同步—請求響應模式
2)異步—請求響應模式
b)單向通訊模型(Oneway)
客戶端發送請求後,無需等待服務器回覆,只需獲得一個通知來確認消息已經成功發送便可
c)雙工通訊(Duplex)
通訊雙方都是客戶端和服務器,雙方均可以發送請求並回復消息。
6、行爲的分類
a)服務行爲
運行於服務級別,能訪問全部的端點。主要控制實例化與事務,還用於受權和審計。
b)端點行爲
涉及服務端點,適用於對進出服務的消息進行審查和處理。(消息跟蹤器)
c)操做行爲
涉及操做級別,對於服務操做而說,他們適用於序列化、事務流和參數處理。(參數檢驗器)
7、併發與實例化
WCF中控制併發的行爲
1.實例上下文模式(InstanceContextMode)
a)Single:一個服務類的實例處理全部入站請求,這實現爲單例(Singleton).
b)PerCall:爲每一個入站請求建立一個服務類的實例。
c)PerSession:爲每一個客戶端會話建立一個服務類的實例。(默認方式)
2.併發模式(ConcurrencyMode)
a)Single:在同一時刻只有一個線程訪問服務類,這是最安全的設置,由於不用擔憂線程安全問題。
b)Reentrant:在同一時刻只有一個線程訪問類,但該線程能暫時離開服務類,稍後回來並繼續訪問。
c)Multiple:多個線程能併發訪問服務類
8、託管
服務並不能單獨存在,必須寄存在宿主中。服務宿主(Service host)是一個負責WCF服務的生命週期(LiftTime)和上下文(Context)的操做系統進程。
負責啓動和中止WCF服務,並提供了一些控制服務的基本管理功能。
託管的方式:
1.控制檯程序/WINDOWS程序(自託管)
優勢:開發簡單
缺點:在項目中應用並不常見,一般只用在測試階段
2.IIS
優勢:宿主進程能夠在客戶端提交第一次請求的時候自動啓動,還能夠藉助IIS管理宿主進程的生命週期。
缺點:只能支持HTTP協議。
basicHttpBinding
wsHttpBinding
wsDualHttpBinding
3.Windows服務(自託管)
優勢:隨系統一同啓動
四、IIS託管瀏覽元數據效果圖
9、客戶端
客戶端引用服務的方法:
1.使用svcutil.exe工具(生成ServiceBase)
2.使用 Add Service Reference(控制檯程序中沒有) (生成ServiceBase)
3.使用信道工廠channelFactory或channelFactory<T>
4. 手工創建(手工添加繼承ServiceBase)
客戶端須要哪些文件:
1.契約接口
2.配置文件(非必須,可編碼實現一樣功能)
3.數據契約實現的類與系統支持的數據類型
10、服務創建
步驟一:構建整個解決方案
Contracts:類庫項目,定義服務契約(Service Contract),引用System.ServiceMode程序集(WCF框架的絕大部分實現和API定義在該程序集中);
Services:類庫項目,對WCF服務的實現。定義在該項目中的全部WCF服務實現了定義在Contracts中相應的服務契約,因此Services具備對Contracts項目的引用
Hosting:控制檯應用,實現對定義在Services項目中的服務的寄宿,該項目需要同時引用Contracts和Services兩個項目和System.ServiceMode程序集;
Client:一個控制檯應用模擬服務的客戶端,該項目引用System.ServiceMode程序集。
步驟二:建立服務契約
注意:須要引用System.ServiceModel.dll
添加[ServiceContract]與[OperationContract]特性
步驟三:建立服務
注意:須要引用System.ServiceModel.dll
引用服務契約所在的dll
步驟四:經過自我寄宿的方式寄宿服務
注意:須要引用System.ServiceModel.dll
引用服務契約所在的dll
引用服務所在的dll
新建項,選擇應用程序配置文件,文件名App.config保持不變。
修改app.config內容以下:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.serviceModel> 4 <services> 5 <service name="Services.CalculatorService" behaviorConfiguration="behaviorConfiguration"> 6 <host> 7 <baseAddresses> 8 <add baseAddress="http://localhost:8013/"/> 9 </baseAddresses> 10 </host> 11 <endpoint address="" binding="basicHttpBinding" contract="Contracts.ICalculator"></endpoint> 12 </service> 13 </services> 14 <behaviors> 15 <serviceBehaviors> 16 <behavior name="behaviorConfiguration"> 17 <serviceMetadata httpGetEnabled="true"/> 18 </behavior> 19 </serviceBehaviors> 20 </behaviors> 21 </system.serviceModel> 22 </configuration>
步驟五:建立客戶端調用服務
使用微軟的svcutil工具CalculatorService服務的客戶端代理類,
經過開始菜單/Microsoft Visual Studio 2010/Visual Studio Tools/Visual Studio 2010命令提示,啓動命令環境。
確認CalculatorService服務已啓動
切換當前路徑到解決方案目錄:cd G:\Program\WCF\WCFDeom\Client
輸入命令:svcutil http://localhost:8013/?wsdl /o:CalculatorService.cs
執行成功後,會在解決方案目錄下生成兩個文件:CalculatorService.cs 和output.config
停止Host項目的調試,回到Client項目,選擇添加 現有項 ,而後選擇這兩個文件,添加後,將output.config重命名爲App.config
Client項目中添加引用,選擇System.ServiceModel
修改program.cs代碼以下:
步驟六:創建客戶端程序
注意:須要引用System.ServiceModel.dll
引用服務契約所在的dll
(這裏創建的方式是:信道工廠)
運行結果以下:
但願可以幫到各位園友們!精彩內容整理中..............
成功路上最心酸的是要耐得住寂寞、熬得住孤獨,總有那麼一段路是你一我的在走,一我的堅強和勇敢。
人的一輩子沒有過不去的坎,跨坎的源動力在自已。