<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      WCF分布式開發步步為贏(4):WCF服務可靠性傳輸配置與編程開發

      今天繼續WCF分布式開發步步為贏系列的第4節:WCF服務可靠性傳輸配置與編程開發。這個章節,我們要介紹什么是WCF服務的可靠性傳輸,隨便介紹網絡協議的概念,Web Service為什么不支持可靠性傳出,具體的WCF綁定協議和可靠性的關系,實現可靠性傳輸有什么方式,以及配置和開發的詳細實現代碼分析部分。【1】可靠性傳輸【2】配置方式實現可靠性傳輸【3】編程方式實現可靠性傳輸【4】編程實現必備有序傳遞【5】結果分析和總結。

          下面進入正式的內容:

       【1】可靠性傳輸:

      【1.0】網絡協議基礎知識:

          這里我們有必要先介紹OSI參考模型幾個主要協議的基本概念,見下表:

       

      OSI中的層

      功能

      TCP/IP協議族

      應用層

      文件傳輸,電子郵件,文件服務,虛擬終端

      TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

      表示層

      數據格式化,代碼轉換,數據加密

      沒有協議

      會話層

      解除或建立與別的接點的聯系

      沒有協議

      傳輸層

      提供端對端的接口

      TCP,UDP

      網絡層

      為數據包選擇路由

      IP,ICMP,RIP,OSPF,BGP,IGMP

      數據鏈路層

      傳輸有地址的幀以及錯誤檢測功能

      SLIP,CSLIP,PPP,ARP,RARP,MTU

      物理層

      以二進制數據形式在物理媒體上傳輸數據

      ISO2110,IEEE802。IEEE802.2

       

       

           TCP/IP是一個協議族,為了幫助大家理解下面協議綁定的內容,把IP想像成一種高速公路,它允許其它協議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的汽車,汽車上貨物就是HTTP,SNMP,FTP,SMTP,DNS,Telnet 協議等。

        TCP和UDP是FTP,HTTP和SMTP等應用層協議使用的傳輸層協議。TCP提供面向連接、有保證的數據傳輸,而UDP不提供。TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

        HTTP(超文本傳輸協議)是利用TCP協議在兩臺機器(通常是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。

          這里隨便介紹一下SOAP協議,它也是基于XML語言,可以實現分布式系統間的數據交換的協議。 SOAP:Simple Object Access Protocol簡單對象訪問協議是一種輕量的、簡單的、基于 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多因特網協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序,當然也可以映射到TCP協議。

      【1.1】WCF可靠性傳輸簡介:

      WCF與其他面向服務技術之間(asp.net /j2ee Web Service技術等)最大的區別在于傳輸可靠性(Transport Reliability)與消息可靠性(Message Reliability)。傳輸可靠性(例如通過TCP傳輸)在網絡數據包層提供了點對點保證傳遞(Point-to-Point Guaranteed Delivery),以確保數據包的順序無誤。傳輸可靠性不會受到網絡連接的中斷或其他通信問題的影響。消息可靠性提供了端對端保證傳遞(End-to-End Guaranteed Delivery),確保消息的順序無誤。消息可靠性與引入的中間方的數量無關,與網絡跳數(Network Hops)的數量也沒有關聯。消息可靠性基于一個行業標準。該行業標準為可靠的基于消息的通信維持了一個在傳輸層的會話。如果傳輸失敗,例如無線連接中斷,消息可靠性就會重試(Retries)功能。它還能夠自動處理網絡阻塞(Congestion)、消息緩存(Message Buffering)以及流控制(Flow Control),根據具體情況適時調整發送的消息數。消息可靠性還能夠通過對連接的驗證管理連接自身,并在不需要連接時清除它們。

       這里WCF的可靠性傳輸首先來說數據傳輸同樣依賴底層的網絡傳輸協議,如TCP協議,TCP傳輸控制協議底層就是要求建立連接的狀態進行數據傳遞。其次消息可靠性也是對已有消息可靠性行業標準的支持,WCF框架實現或者擴展了消息可靠性行業標準。

      Web Service使用http/post/get/soap三種方式進行訪問,http協議是請求/響應協議,不會維持特定的傳輸通道,本身是不支持可靠性。

      【1.2】傳輸協議與可靠性:

      看來以上的介紹內容,我們再來介紹WCF綁定協議的可靠性,同樣WCF的可靠性和具體的綁定協議彌補可分。總結了綁定、可靠性、有序傳遞(Ordered Delivery)以及它們各自的默認值之間的關系。可靠性與綁定對應關系如下:

      可靠性與綁定對應關系

      綁定協議名稱            支持可靠性         默認可靠性           支持有序傳遞       默認有序傳遞

      BasicHttpBinding                No               N/A                    No                  N/A

      NetTcpBinding                   Yes               Off                    Yes                  On

      NetPeerTcpBinding              No                N/A                   No                  N/A

      NetNamedPipeBinding          No                N/A (On)           Yes                  N/A (On)

      WSHttpBinding                  Yes               Off                    Yes                  On

      WSFederationHttpBinding   Yes               Off                     Yes                  On

      WSDualHttpBinding            Yes               On                     Yes                  On

      NetMsmqBinding                 No                N/A                    No                   N/A

      MsmqIntegrationBinding       No               N/A                    No                   N/A

      BasicHttpBinding不支持可靠性,BasicHttpBinding面向舊的ASMX Web服務,是不具有可靠性的;

      NetMsmqBinding不支持可靠性,MSMQ協議,使用消息隊列,針對斷開調用,不存在傳輸會話;              

      MsmqIntegrationBinding不支持可靠性;支持WCF與MSMQ協議通信,不存在傳輸會話;

      NetPeerTcpBinding不支持可靠性。NetPeerTcpBinding則為廣播場景設計。

      WSDualHttpBinding支持可靠性的,建立兩個http會話通道,保持回調通道,確保基于HTTP協議的客戶端存在;

      NetTcpBinding 支持可靠性,顯然使用TCP傳輸數據。以及各種WS綁定,默認情況下并不支持可靠性,允許啟用;     

      NetNamedPipeBinding綁定總是擁有一個確定的從客戶端到服務的跳數,因而它的可靠性是綁定固有的;

      WSFederationHttpBinding支持可靠性,支持聯邦通信協議,支持在多個安全區域進行安全會話。

      WS綁定協議一般都提供了對可靠性傳遞的支持,可以編程或者配置方式在項目里啟用。可靠性傳輸要根據綁定的目標場景而定。

      【1.3】有序消息:

           TCP提供了差錯和流量控制。WCF消息可靠性也以來具體的綁定協議底層的傳輸協議和自身擴展的機制確保了消息的有序傳遞,允許消息按照發送順序而非接收順序執行。我們在實際的WCF項目里及可以只啟用可靠性,而不啟用有序傳遞。

          同樣WCF也為我們提供了靈活的方式來配置也啟用項目中的傳輸可靠性和傳遞的有序性,你可以使用配置文件方式也可以使用編程方式實現。如果我們啟用了可靠性,則客戶端與服務端必須保持配置一致,否則客戶端無法與服務通信。我們可以只對支持它的綁定配置可靠性。下面我們就來進行詳細的介紹。

      【2】配置方式實現可靠性傳輸:

           下面我們使用服務端配置文件,啟用了TCP綁定的可靠性。代碼如下:

      復制代碼
        <system.serviceModel>
          <services>
            <service behaviorConfiguration="WCFService.WCFServiceBehavior"
              name="WCFService.WCFService">
              <endpoint
                address="http://localhost:8001/WCFService"
                binding="wsHttpBinding"
                contract="WCFService.IWCFService">
              </endpoint>
              <endpoint
                address="net.tcp://localhost:8002/WCFService"
                binding="netTcpBinding"
                 bindingConfiguration="ReliableTCP"
                contract="WCFService.IWCFService">
              </endpoint>
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
              <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
              <host>
                <baseAddresses>
                  <add baseAddress="http://localhost:8001/"/>
                  <add baseAddress="net.tcp://localhost:8002/"/>
                </baseAddresses>
              </host>
            </service>
          </services>
          <behaviors>
            <serviceBehaviors>
              <behavior name="WCFService.WCFServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
              </behavior>
            </serviceBehaviors>
          </behaviors>
          <bindings>
            <netTcpBinding >
              <binding name="ReliableTCP">
                <reliableSession enabled="True"/>
              </binding>
            </netTcpBinding>
          </bindings>
        </system.serviceModel>
      復制代碼

       這里我們要設置服務終結點的綁定配置,bindingConfiguration="ReliableTCP",然后在給出具體綁定配置的可靠傳輸

            <netTcpBinding >
              <binding name="ReliableTCP">
                <reliableSession enabled="True"/>
              </binding>
            </netTcpBinding>

      這樣WCF服務就會啟用可靠消息傳遞。

      【3】編程方式實現可靠性傳輸:

          至于編程配置方式,這里我們稍作介紹,TCP綁定和WS綁定提供了略微不同的屬性來配置可靠性。這里的例子我們繼續使用的是針對TCP編程實現可靠性傳輸的示例代碼:

      復制代碼
      //采用自托管方式,也可以是IIS、WAS,Windows服務等用戶自定義程序托管服務
          public class WCFHost
          {
              static void Main(string[] args)
              {

                  //反射方式創建服務實例,
                  //Using方式生命實例,可以在對象生命周期結束時候,釋放非托管資源
                  using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
                  {
                      //相同的服務注冊多個基地址
                      //添加服務和URI,用戶資源標識符
                      Uri tcpAddress = new Uri("net.tcp://localhost:8001/WCFService");
                      //Uri httpAddress = new Uri("http://localhost:8002/WCFService");
                      //Uri pipeAddress = new Uri("net.pipe://localhost:8002/WCFService");
                      SecurityMode securityMode = new SecurityMode();//實例化安全模型
                      //設置可靠性會話為真
                      NetTcpBinding netTcpBinding = new NetTcpBinding(securityMode, true);
                      //添加服務終結點,方式不變
                      host.AddServiceEndpoint(typeof(WCFService.IWCFService), netTcpBinding, tcpAddress);
                      //host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpAddress);
                      //host.AddServiceEndpoint(typeof(WCFService.IWCFService), new NetNamedPipeBinding(), pipeAddress);
                      ////判斷是否以及打開連接,如果尚未打開,就打開偵聽端口
                      if (host.State != CommunicationState.Opening)
                          host.Open();
                      //顯示運行狀態
                      Console.WriteLine("Host is runing! and state is {0}", host.State);
                      //等待輸入即停止服務
                      Console.Read();


                  }
              }
      復制代碼

         SecurityMode securityMode = new SecurityMode();這個語句就是實例化安全模型,NetTcpBinding netTcpBinding = new NetTcpBinding(securityMode, true);傳入的參數為true,就是啟用可靠性傳遞。添加服務終結點,方式不變host.AddServiceEndpoint(typeof(WCFService.IWCFService), netTcpBinding, tcpAddress);這樣就編程實現了TCP消息的可靠性傳遞。

      【4】編程實現必備有序傳遞:

      我們這里在簡單介紹一下WCF有序傳遞的概念。我們知道服務代碼和契約定義應該與它使用的綁定及屬性無關。實際上,WCF服務的實現或者數據契約本身都會依賴于系統消息的有序傳遞(Ordered Delivery)。為了幫助契約或服務的開發者能夠約束支持的綁定,WCF定義了DeliveryRequirementsAttribute類,這是一個密封類,不可繼承,我們使用他來定義服務的傳遞屬性。這里應用到服務屬性,設置服務啟用有序隊列傳遞。

      復制代碼
          [DeliveryRequirementsAttribute(
        QueuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed,
        RequireOrderedDelivery = true
      )]
          public class WCFService : IWCFService
          {
              //實現接口定義的方法
              public string SayHello(string name)
              {
                  Console.WriteLine("Hello! {0},Using string ", name);
                  return "Hello! " + name;
              }
              //實現接口定義的方法
              public string SayHelloToUser(User user)
              {
                  Console.WriteLine("Hello! {0}    {1},Using DataContract ", user.FirstName, user.LastName);
                  return "Hello! " + user.FirstName + " " + user.LastName;
              }
          }
      復制代碼

       

      DeliveryRequirementsAttribute..::.RequireOrderedDelivery 屬性設置綁定協議是否必須支持已排序消息。可以應用到服務一級,對WCF服務的所有終結點施加影響,或者只對公開了特定服務契約的終結點施加影響;如果應用到WCF服務一級,則意味著選用有序傳遞是根據具體實現作出的決策。DeliveryRequirements特性也可以應用到服務契約一級,它會對所有支持該契約的服務施加影響。體現了對有序傳遞的要求是根據設計作出的決策。這一約束會在裝載服務時得到執行與驗證。命名管道綁定符合有序傳遞的約束。注:

       

      命名空間:  System.ServiceModel
      程序集:  System.ServiceModel(在 System.ServiceModel.dll 中)

      【5】結果分析和總結。

           配置完畢后,我們可以在客戶端添加WCF服務引用,生成的配置文件,內容包含對可靠消息傳遞的配置信息,具體如下:

      復制代碼
                  <netTcpBinding>
                      <binding name="NetTcpBinding_IWCFService" closeTimeout="00:01:00"
                          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                          hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                          maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                          maxReceivedMessageSize="65536">
                          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                          <reliableSession ordered="true" inactivityTimeout="00:10:00"
                              enabled="true" />
                          <security mode="Transport">
                              <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                              <message clientCredentialType="Windows" />
                          </security>
                      </binding>
                  </netTcpBinding>
      復制代碼

          <reliableSession ordered="true" inactivityTimeout="00:10:00"  enabled="true" />是對可靠消息傳遞的的設置節點信息。

         以上就是本節的全部內容,介紹了基本的網絡協議,WCF可靠性傳遞的概念以及和具體的各個綁定協議之間的關系,我們還給出了一個簡單的通過配置文件和代碼實現可靠消息傳遞的例子。并進行了分析講解。WCF為我們提供了可靠消息傳遞的有效機制,這個特性也是基于已有網絡傳輸協議,WCF再次基礎上多數據通信模型進行了擴展。這種特性確實對增強我們程序的數據傳遞的準確性有很大的幫助,但是是否使用可靠消息傳遞要基于實際的項目需要,不能強制使用。我們獲得安全可靠性的同時,實際底層付出的是效率的代碼。 下面是本節的示例代碼/Files/frank_xl/WCFServiceReliableFrankXuLei.rar

      供大家參考~下一節我們學習服務契約相關的知識點,敬請關注,謝謝。

      參考:

      1.百度百科:TCP/IP協議

      2.《programming WCF Service》

      3.msdn

      posted @ 2016-08-09 11:27  閆寶平  閱讀(525)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 仁怀市| 日本三级香港三级三级人妇久| 日韩精品无码一区二区三区视频| 欧美大bbbb流白水| 婷婷六月色| 白嫩少妇bbw撒尿视频| 91偷自国产一区二区三区| 性欧美VIDEOFREE高清大喷水| 国产日韩一区二区在线看| 国产成人啪精品午夜网站| 老师扒下内裤让我爽了一夜| 亚洲an日韩专区在线| 伊人久久精品无码麻豆一区| 图片区 小说区 区 亚洲五月| 丝袜老师办公室里做好紧好爽| 欧美裸体xxxx极品| 国精品午夜福利视频不卡| 国产永久免费高清在线| 麻豆tv入口在线看| 亚洲精品97久久中文字幕无码| 亚洲欧美高清在线精品一区二区 | 久久亚洲国产品一区二区| 十九岁的日本电影免费观看| 四虎永久在线精品无码视频| 亚洲色精品vr一区区三区| 国产精品三级一区二区三区| 亚洲欧洲日韩精品在线| 亚洲av精彩一区二区| 久久亚洲中文无码咪咪爱| 亚洲国产欧美一区二区好看电影| 国产精品天天在线午夜更新| 国产精品高清一区二区三区| 99在线精品免费视频| 最新中文字幕国产精品| 国产精品毛片一区二区| 免费国产女王调教在线视频 | 日本亚洲一区二区精品久久| 成人精品区| 新乡县| 成人亚欧欧美激情在线观看| 欧美人成在线播放网站免费|