




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、w cf分布式開發(fā)步步為贏(4): wcf服務(wù)可靠性傳輸配置與編程分類:wcf分布式開發(fā)步步為贏,soa and eai今天繼續(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可靠性傳輸:1.0網(wǎng)絡(luò)協(xié)
2、議基礎(chǔ)知識(shí):這里我們有必要先介紹osi參考模型兒個(gè)主要協(xié)議的基本概念,見下農(nóng):osi中的層功能tcp/ip協(xié)議族應(yīng)用層文件傳輸,電子郵件,文件服務(wù),虛擬終端tftp, http, snmp, ftp, smtp, dns, telnet表示層數(shù)據(jù)格式化,代碼轉(zhuǎn)換,數(shù)據(jù)加密沒有協(xié)議會(huì)話層解除或建立與別的接點(diǎn)的聯(lián)系沒有協(xié)議傳輸層提供端對端的接口tcp, udp網(wǎng)絡(luò)層為數(shù)據(jù)包選擇路由ip, icmp, rip, ospf, bgp, igmp數(shù)據(jù)鏈路層傳輸仃地址的幀以及錯(cuò)誤檢測功能slip, cslip, ppp, arp, rarp, mtu物理層以二進(jìn)制數(shù)據(jù)形式在物理媒體i:傳輸數(shù)據(jù)iso211
3、0, ieee802o ieee802.2tcp/ip是一個(gè)協(xié)議族,為了幫助大家理解下面協(xié)議綁定的內(nèi)容,把ip想像成-種高速公 路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。tcp和udp是高速公路上的汽車, 汽車上貨物就是http, snmp, ftp, smtp, dns, telnet協(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ī)器(通常是
4、web服務(wù)器和客戶端)之間傳 輸信息的協(xié)議??蛻舳耸褂脀eb瀏覽器發(fā)起http請求給web服務(wù)器,web服務(wù)器發(fā)送被請 求的信息給客戶端。這里隨便介紹一下soap協(xié)議,它也是基于xml語言,可以實(shí)現(xiàn)分布式系統(tǒng)間的數(shù)據(jù)交換的協(xié) 議。soap: simple object access protocol簡單對象訪問協(xié)議是一種輕量的、簡單的、基 于xml的協(xié)議,它被設(shè)計(jì)成在web上交換結(jié)構(gòu)化的和固化的信息。soap可以和現(xiàn)存的 許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文木傳輸協(xié)議(http),簡單郵件傳輸協(xié)議(smtp), 多用途網(wǎng)際郵件擴(kuò)充協(xié)議(mime) o它還支持從消息系統(tǒng)到遠(yuǎn)程過程調(diào)用(rpc)
5、等人量的應(yīng) 用程序,當(dāng)然也可以映射到tcp協(xié)議。1.1 wcf uj'靠性傳輸簡介:wcf與其他而向服務(wù)技術(shù)之間( j2ee web service技術(shù)等)最大的區(qū)別在于傳輸 可靠性(transport reliability)與消息可靠性(message reliability)。傳輸可靠性(例如 通過tcp傳輸)在網(wǎng)絡(luò)數(shù)據(jù)包層提供了點(diǎn)對點(diǎn)保證傳遞(pointtopoint guaranteed delivery),以確保數(shù)據(jù)包的順序無誤。傳輸可靠性不會(huì)受到網(wǎng)絡(luò)連接的中斷或其他通信問題 的影響。消息町靠性提供了端對端保證傳遞(end-to- end guaranteed delive
6、ry),確保消 息的順序無謀。消息可靠性與引入的中間方的數(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)流控1訓(xùn)(flowcontrol),根據(jù)具體情況適時(shí)調(diào)整發(fā)送的消息數(shù)。消息可靠性還能夠通過對連接的驗(yàn)證管理連 接自身,并在不需耍連接時(shí)清除它們。這里wcf的可靠性傳輸首先來說數(shù)據(jù)傳輸同樣依賴底層的網(wǎng)絡(luò)傳輸協(xié)議,如tc
7、p協(xié)議,tcp 傳輸控制協(xié)議底層就是耍求建立連接的狀態(tài)進(jìn)行數(shù)據(jù)傳遞。其次消息可靠性也是對已有消息町靠 性行業(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é)議是請求/響應(yīng)協(xié)議,不 會(huì)維持特定的傳輸通道,本身是不支持可靠性o1.2傳輸協(xié)議與可靠性:看來以上的介紹內(nèi)容,我們再來介紹wcf綁泄協(xié)議的??啃?,同樣wcf的町靠性和具體的綁 定協(xié)議彌補(bǔ)可分??偨Y(jié)了綁定、可靠性、有序傳遞(ordered delivery)以及它們各口的默認(rèn) 值z間的關(guān)系??煽啃耘c綁定對應(yīng)關(guān)系如下:可靠性與綁定對應(yīng)關(guān)系綁立協(xié)議名
8、稱支持可靠性默認(rèn)可靠性支持冇序傳遞默認(rèn)有序傳遞basichttpbi ndingn/anon/anonettcpbindingonyesoffyesnetpeertcpbindingn/anon/anonetnamedpipebindi ngnon/a (on)yesn/a (on)wshttpbi ndingonyesoffyeswsfederationhttpbi ndingonyesoffyeswsdualhttpbindi ngonyesonyesnetmsmqbindi ngn/anon/anomsmql n tegrationbi ndingn/anon/anobasichttpb
9、inding不支持可靠性,basichttpbinding面向ih的asmx web服務(wù),是不具有 可靠性的;netmsmqbinding不支持可靠性,msmq協(xié)議,使用消息隊(duì)列,針對斷開調(diào)用,不存在傳輸 會(huì)話;msmqlntegrationbinding不支持可靠性;支持wcf與msmq協(xié)議通信,不存在傳輸會(huì)話;netpeertcpbinding不支持可靠性。netpeertcpbinding則為廣播場景設(shè)計(jì)。wsdualhttpbinding支持可靠性的,建立兩個(gè)http會(huì)話通道,保持回調(diào)通道,確?;趆ttp 協(xié)議的客戶端存在;nettcpbinding支持可靠性,顯然使用tcp傳輸數(shù)據(jù)
10、。以及各種ws綁定,默認(rèn)情況下并不 支持可靠性,允許啟用;netnamedrpebinding綁定總是擁有一個(gè)確定的從客戶端到服務(wù)的跳數(shù),因而它的可靠性是 綁定固有的;wsfederationhttpbinding支持町靠性,支持聯(lián)邦通信協(xié)議,支持在多個(gè)安全區(qū)域進(jìn)行安全 會(huì)話。ws綁定協(xié)議一般都提供了對可靠牲傳遞的支持,可以編程或者配置方式在項(xiàng)目里啟用??煽啃?傳輸要根據(jù)綁定的目標(biāo)場最而定。1.3有序消息:tc p提供了差錯(cuò)和流量控制。wcf消息可靠性也以來具體的綁定協(xié)議底層的傳輸協(xié)議和口身 擴(kuò)展的機(jī)制確保了消息的有序傳遞,允許消息按照發(fā)送順序而非接收順序執(zhí)行。我們在實(shí)際的 wcf項(xiàng)目里及可以
11、只啟用可靠性,而不啟用有序傳遞。同樣wcf也為我們提供了靈活的方式來配置也啟用項(xiàng)冃中的傳輸可靠性和傳遞的有序性,你可 以使用配置文件方式也可以使用編程方式實(shí)現(xiàn)。如果我們啟用了可靠性,則客戶端與服務(wù)端必須 保持配置一致,否則客戶端無法與服務(wù)通信。我們可以只対支持它的綁泄配置可靠性。下面我們 就來進(jìn)行詳細(xì)的介紹。2 配置方式實(shí)現(xiàn)可靠性傳輸:下面我們使用服務(wù)端配置文件,啟fflttcp綁定的可靠性。代碼如下:v system ,servicemodel>v services>v service behaviorconfiguration = "wcfservice.wcfser
12、vicebehavior"n ame= "wcfservice.wcfservice">< en dpointaddress=" http:/local host: 8001 /wcfservice"binding "wshttpbinding”contract= "wcfservicewcfservice"</endpoi nt>< en dpoi ntaddress=" net. tcp:/local host: 8002/wcfservice"binding
13、"n ettcpbindi ng"bin dingc on figurati on=" reliabletcp"contract= "wcfservicewcfservice"</e ndpoi nt>vendpoint address="mexh binding= "mexhttpbinding"contract= "imetadataexchange" />vendpoint address="mex" binding= "mextc
14、pbinding"contract= "imetadataexchange" />< host>< baseaddresses>< add baseaddress= *'http:/localhost:8001/'7>< addbaseaddress= "net.tcp:/localhost:8002/'7></baseaddresses></host></service></services>< behaviors>
15、< servicebehaviors>< behavior name= hwcfservice.wcfservicebehaviorh>< servicemetadatahttpgetenabled= ”true” /><servicedebugincludeexceptiondetailinfaults= ”false” /></behavior>< /servicebehaviors></behaviors>< bindings>< nettcpbinding>< bindin
16、g name= "reliabletcp、< reliablesession enabled= 'ftrue,/></bindi ng></nettcpbi nding></bindi ngs>< / system. servicemodel>這里我們耍設(shè)置服務(wù)終結(jié)點(diǎn)的綁泄配置,bindingconfiguration二”reliabletcp”,然后在給出具體綁定配迸的可靠傳輸< nettcpbinding>< binding name= "reliabletcp、< reliab
17、lesession enabled= ,true,/></binding></nettcpbindi ng>這樣wcf服務(wù)就會(huì)啟用可靠消息傳遞c3 編程方式實(shí)現(xiàn)可堂性傳輸: 至于編程配置方式,這里我們稍作介紹,tcp綁定和ws綁定提供了略微不同的屬性來配置可 靠性。這里的例子我們繼續(xù)使用的是針對tcp編程實(shí)現(xiàn)可靠性傳輸?shù)氖纠a:/采用口托管方式,也可以是iis、was,windows服務(wù)等用戶口定義程序托管服務(wù) public class wcfhoststatic void main(string args)反射方式創(chuàng)建服務(wù)實(shí)例,/using方式半命實(shí)例,可以在
18、對象生命周期結(jié)束時(shí)候,釋放非托管資源 using (servicehost host = new servicehost(typeof(wcfservice.wcfservice)/和同的服務(wù)注冊多個(gè)基地址添加服務(wù)和uri,用戶資源標(biāo)識(shí)符uri tcpaddress = new uri(nnet.tcp:/localhost:8001/wcfservice"); /uri httpaddress = new uri(mhttp:/localhost:8002/wcfservice"); /uri pipeaddress = newuri ("net. pipe:/
19、localhost: 8002/wcfservice");security modesecurity mode = new securitymode(); 實(shí)例化安全模型設(shè)置可靠性會(huì)話為真nettcpbi ndingn ettcpbi nding = new nettcpbindi ng (security mode, true);添加服務(wù)終結(jié)點(diǎn),方式不變 host.addserviceendpoint(typeof(wcfservice.iwcfservice), nettcpbinding, tcpaddress);/host.addserviceendpoint(typeof(
20、wcfservicewcfservice), new wshttpbinding(), httpaddress);/host.addserviceendpoint(typeof(wcfservice.iwcfservice), new netnamedpipebinding(), pipeaddress);/判斷是否以及打開連接,如果尚未打開,就打開偵聽端口if (host.state != communicationstate.opening)host.ope n();/顯示運(yùn)行狀態(tài)console.writeline("host is runing! and state is 0&
21、quot;, host.state);等待輸入即停止服務(wù)con sole.read();security modesecurity mode = new securitymode();這個(gè)語句就是實(shí)例化安全模型, nettcpbindingnettcpbinding = new nettcpbinding( security mode, true);傳入的參數(shù) 為true,就是啟用可靠性傳遞。添加服務(wù)終結(jié)點(diǎn),方式不變host.addserviceendpoint(typeof(wcfservice.1 wcfservice), nettcpbinding, tcpaddress);這樣就編程實(shí)
22、現(xiàn)了 tcp消息的可靠件傳遞。4 編程實(shí)現(xià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ì)列傳遞。deli very requi rem entsattribute(queued deli very requ
23、irements = queu eddel i very requi rem entsmode. al lowed,requi reordereddeli very = true)public class wcfservice : i wcfservice實(shí)現(xiàn)接口定義的方法public string sayhello(string name)console.writeline(hhello! 0 ,using string h, name);return hhello! h + name;/實(shí)現(xiàn)接口定義的方法public string sayhellotouser(user user)cons
24、ole.writeline("hello! 01 ,usingdatacontract ", user.firstname,user.lastname);return nhello! h + user.firstname + h h + user丄astname;deliveryrequirementsattribute.: .requireordereddelivery 屬性設(shè)置綁定協(xié)議是否必 須支持已排序消息。町以應(yīng)用到服務(wù)一級,對wcf服務(wù)的所有終結(jié)點(diǎn)施加影響,或者只對公開 了特定服務(wù)契約的終結(jié)點(diǎn)施加彩響;如果應(yīng)用到wcf服務(wù)一級,則意味著選用有序傳遞是根據(jù) 具體實(shí)現(xiàn)
25、作出的決策。delivery requirements特性也町以應(yīng)用到服務(wù)契約一級,它會(huì)對所有 支持該契約的服務(wù)施加影響。體現(xiàn)了對有序傳遞的要求是根據(jù)設(shè)計(jì)作出的決策。這一約束會(huì)在裝 載服務(wù)時(shí)得到執(zhí)行與驗(yàn)證。命名管道綁定符合有序傳遞的約朿。注:命名空間:system.servicemodel程序集:system.servicemodel (在 system.servicemodel.dll 中)5 結(jié)果分析和總結(jié)。配置完畢后,我們可以在客戶端添加wcf服務(wù)引用,生成的配置文件,內(nèi)容包含対可靠消息傳 遞的配置信息,具體如下:v nettcpbinding>v binding name= &q
26、uot;nettcpbindingwcfservice" closetimeout= "00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout= "00:01:00" transactionflow= "false" transfermode= "buffered"tra nsacti on protocol "oletransactions"hostnamecomparisonmode= "strongwildcard" listenbacklog= "10"max buff erpoolsize= "524288" maxbuffersize= "65536" maxconnections= ”1 0"m ax receivedmessagesize= n65536">< readerquotasmaxdepth="32n maxstringcontentlength= "8192
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動(dòng)用戶積極參與社區(qū)建設(shè)
- 大理農(nóng)林職業(yè)技術(shù)學(xué)院《林木育種學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙幼兒師范高等??茖W(xué)?!多l(xiāng)村幼兒教育課程資源開發(fā)與利用》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京審計(jì)大學(xué)金審學(xué)院《德語文學(xué)史》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆湖北省武漢市青山區(qū)新溝橋小學(xué)數(shù)學(xué)四年級第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 雅安職業(yè)技術(shù)學(xué)院《測繪工程專業(yè)英語》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北師范大學(xué)文理學(xué)院《生物技術(shù)藥物研發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 系統(tǒng)研發(fā)費(fèi)合同范本
- 課題開題報(bào)告:產(chǎn)教融合背景下共建共享實(shí)驗(yàn)教學(xué)示范中心探索
- 造紙上漿劑企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 2025年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院單招職業(yè)傾向性測試題庫審定版
- 人教版四年級數(shù)學(xué)下冊《圖形的運(yùn)動(dòng)(二)》試題(含答案)
- 2024-2025學(xué)年五年級(下)信息科技教學(xué)計(jì)劃
- 《老年人權(quán)益保障法》
- 2025屆上海市(春秋考)高考英語考綱詞匯對照表清單
- 2025-2030年中國pcb行業(yè)競爭格局及未來投資趨勢分析報(bào)告新版
- 2025年年食堂工作總結(jié)和年工作計(jì)劃例文
- 船舶制造設(shè)施安全生產(chǎn)培訓(xùn)
- 全國駕駛員考試(科目一)考試題庫下載1500道題(中英文對照版本)
- TSG 07-2019電梯安裝修理維護(hù)質(zhì)量保證手冊程序文件制度文件表單一整套
- 2025深圳勞動(dòng)合同下載
評論
0/150
提交評論