WCF的學習之旅

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中的地址   

         •Http(basic,WS*)
         •Tcp  
         •Peer netWork(對等網)
         •IPC(基於命名管道的內部進程通訊)
         •MSMQ

          

    四、元數據交換     

          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

                  (這裏創建的方式是:信道工廠)

             

            運行結果以下:

              

      但願可以幫到各位園友們!精彩內容整理中..............

      成功路上最心酸的是要耐得住寂寞、熬得住孤獨,總有那麼一段路是你一我的在走,一我的堅強和勇敢。

     人的一輩子沒有過不去的坎,跨坎的源動力在自已。

相關文章
相關標籤/搜索