天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

WCF分布式開發(fā)步步為贏系列的(4):WCF服務(wù)可靠性傳輸配置與編程開發(fā)

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

    下面進(jìn)入正式的內(nèi)容:

    【1】可靠性傳輸:

    【1.0】網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識(shí):

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

OSI中的層

功能

TCP/IP協(xié)議族

應(yīng)用

文件傳輸,電子郵件,文件服務(wù),虛擬終端

TFTPHTTPSNMPFTPSMTPDNSTelNET

表示層

數(shù)據(jù)格式化,代碼轉(zhuǎn)換,數(shù)據(jù)加密

沒有協(xié)議

會(huì)話層

解除或建立與別的接點(diǎn)的聯(lián)系

沒有協(xié)議

傳輸層

提供端對(duì)端的接口

TCPUDP

網(wǎng)絡(luò)

為數(shù)據(jù)包選擇路由

IPICMPRIPOSPFBGPIGMP

數(shù)據(jù)鏈路層

傳輸有地址的幀以及錯(cuò)誤檢測(cè)功能

SLIPCSLIPPPPARPRARPMTU

物理層

以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù)

ISO2110IEEE802IEEE802.2

 

     TCP/IP是一個(gè)協(xié)議族,為了幫助大家理解下面協(xié)議綁定的內(nèi)容,把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的汽車,汽車上貨物就是HTTPSNMPFTPSMTPDNSTelNET 協(xié)議等。

  TCP和UDP是FTP,HTTP和SMTP等應(yīng)用層協(xié)議使用的傳輸層協(xié)議。TCP提供面向連接、有保證的數(shù)據(jù)傳輸,而UDP不提供。TCP有一個(gè)特殊的機(jī)制來確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn),而UDP不提供任何這樣的保證。

  HTTP(超文本傳輸協(xié)議)是利用TCP協(xié)議在兩臺(tái)機(jī)器(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議。客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端。

  這里隨便介紹一下SOAP協(xié)議,它也是基于XML語(yǔ)言,可以實(shí)現(xiàn)分布式系統(tǒng)間的數(shù)據(jù)交換的協(xié)議。 SOAP:Simple Object Access Protocol簡(jiǎn)單對(duì)象訪問協(xié)議是一種輕量的、簡(jiǎn)單的、基于 XML 的協(xié)議,它被設(shè)計(jì)成在 WEB 上交換結(jié)構(gòu)化的和固化的信息。 SOAP 可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文本傳輸協(xié)議( HTTP),簡(jiǎn)單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)。它還支持從消息系統(tǒng)到遠(yuǎn)程過程調(diào)用(RPC)等大量的應(yīng)用程序,當(dāng)然也可以映射到TCP協(xié)議。

  【1.1】WCF可靠性傳輸簡(jiǎn)介:

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

這里WCF的可靠性傳輸首先來說數(shù)據(jù)傳輸同樣依賴底層的網(wǎng)絡(luò)傳輸協(xié)議,如TCP協(xié)議,TCP傳輸控制協(xié)議底層就是要求建立連接的狀態(tài)進(jìn)行數(shù)據(jù)傳遞。其次消息可靠性也是對(duì)已有消息可靠性行業(yè)標(biāo)準(zhǔn)的支持,WCF框架實(shí)現(xiàn)或者擴(kuò)展了消息可靠性行業(yè)標(biāo)準(zhǔn)。

Web Service使用http/post/get/soap三種方式進(jìn)行訪問,http協(xié)議是請(qǐng)求/響應(yīng)協(xié)議,不會(huì)維持特定的傳輸通道,本身是不支持可靠性。

    【1.2】傳輸協(xié)議與可靠性:

看來以上的介紹內(nèi)容,我們?cè)賮斫榻BWCF綁定協(xié)議的可靠性,同樣WCF的可靠性和具體的綁定協(xié)議彌補(bǔ)可分。總結(jié)了綁定、可靠性、有序傳遞(Ordered Delivery)以及它們各自的默認(rèn)值之間的關(guān)系。可靠性與綁定對(duì)應(yīng)關(guān)系如下:

可靠性與綁定對(duì)應(yīng)關(guān)系

綁定協(xié)議名稱            支持可靠性         默認(rèn)可靠性           支持有序傳遞       默認(rèn)有序傳遞

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服務(wù),是不具有可靠性的;

NETMsmqBinding不支持可靠性,MSMQ協(xié)議,使用消息隊(duì)列,針對(duì)斷開調(diào)用,不存在傳輸會(huì)話;              

MsmqIntegrationBinding不支持可靠性;支持WCF與MSMQ協(xié)議通信,不存在傳輸會(huì)話;

NETPeerTcpBinding不支持可靠性。NETPeerTcpBinding則為廣播場(chǎng)景設(shè)計(jì)。

WSDualHttpBinding支持可靠性的,建立兩個(gè)http會(huì)話通道,保持回調(diào)通道,確保基于HTTP協(xié)議的客戶端存在;

NETTcpBinding 支持可靠性,顯然使用TCP傳輸數(shù)據(jù)。以及各種WS綁定,默認(rèn)情況下并不支持可靠性,允許啟用;     

NETNamedPipeBinding綁定總是擁有一個(gè)確定的從客戶端到服務(wù)的跳數(shù),因而它的可靠性是綁定固有的;

WSFederationHttpBinding支持可靠性,支持聯(lián)邦通信協(xié)議,支持在多個(gè)安全區(qū)域進(jìn)行安全會(huì)話。

WS綁定協(xié)議一般都提供了對(duì)可靠性傳遞的支持,可以編程或者配置方式在項(xiàng)目里啟用。可靠性傳輸要根據(jù)綁定的目標(biāo)場(chǎng)景而定。

  【1.3】有序消息:

  TCP提供了差錯(cuò)和流量控制。WCF消息可靠性也以具體的綁定協(xié)議底層的傳輸協(xié)議和自身擴(kuò)展的機(jī)制確保了消息的有序傳遞,允許消息按照發(fā)送順序而非接收順序執(zhí)行。我們?cè)趯?shí)際的WCF項(xiàng)目里及可以只啟用可靠性,而不啟用有序傳遞。

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

  【2】配置方式實(shí)現(xiàn)可靠性傳輸:

  下面我們使用服務(wù)端配置文件,啟用了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>

   【3】編程方式實(shí)現(xiàn)可靠性傳輸:

 

     至于編程配置方式,這里我們稍作介紹,TCP綁定和WS綁定提供了略微不同的屬性來配置可靠性。這里的例子我們繼續(xù)使用的是針對(duì)TCP編程實(shí)現(xiàn)可靠性傳輸?shù)氖纠a:

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

            
//反射方式創(chuàng)建服務(wù)實(shí)例,
            
//Using方式生命實(shí)例,可以在對(duì)象生命周期結(jié)束時(shí)候,釋放非托管資源
            using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
            {
                
//相同的服務(wù)注冊(cè)多個(gè)基地址
                
//添加服務(wù)和URI,用戶資源標(biāo)識(shí)符
                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();//實(shí)例化安全模型
                
//設(shè)置可靠性會(huì)話為真
                NETTcpBinding NETTcpBinding = new NETTcpBinding(securityMode, true);
                
//添加服務(wù)終結(jié)點(diǎn),方式不變
                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();
                
//顯示運(yùn)行狀態(tài)
                Console.WriteLine("Host is runing! and state is {0}", host.State);
                
//等待輸入即停止服務(wù)
                Console.Read();


            }
        }

  【4】編程實(shí)現(xiàn)必備有序傳遞:

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

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

 

  【5】結(jié)果分析和總結(jié)。

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

            <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>

NET技術(shù)WCF分布式開發(fā)步步為贏系列的(4):WCF服務(wù)可靠性傳輸配置與編程開發(fā),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 最近免费中文字幕MV在线视频3 | 青青草国产精品久久 | 在线亚洲精品国产一区麻豆 | 亚洲免费网站在线观看 | 成年人免费观看的视频 | qvod快播在线观看 | 欧美一区二区在线观看 | 男人到天堂a线牛叉在线 | 综合亚洲桃色第一影院 | 国产精品卡1卡2卡三卡四 | 草莓视频在线观看完整高清免费 | 99精品在线观看 | 亚洲国产在线99视频 | 芳草地社区在线视频 | 欧美视频毛片在线播放 | 波多野结衣 无码片 | 十分钟免费视频大全在线 | a一级一片免费观看视频 | 亚婷婷洲AV久久蜜臀无码 | 国内久经典AAAAA片 | 中文中幕无码亚洲视频 | 青草国产在线视频免费 | 亚洲欧美日韩在线观看一区二区三区 | av天堂影音先锋在线 | 甜涩性爱下载 | 日本亚洲中文字幕无码区 | 女性私密五月天 | 动漫美女搞鸡 | 亚洲精品久久无码AV片银杏 | 免费精品一区二区三区AA片 | 色爱区综合小说 | 萝莉御姐被吸奶 | 女人麻豆国产香蕉久久精品 | 伊人狼人久久精品热9 | 婷婷五月久久精品国产亚洲 | 久久99热在线观看7 久久99热狠狠色一区二区 | 97久久伊人精品影院 | 成人久久欧美日韩一区二区三区 | 微拍秒拍99福利精品小视频 | cctv论坛| 国产亚洲精品 在线视频 香蕉 |