![WCF從理論到實踐(7)消息交換模式_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/7386d5b7-fe77-44af-a342-289257fe8d12/7386d5b7-fe77-44af-a342-289257fe8d121.gif)
![WCF從理論到實踐(7)消息交換模式_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/7386d5b7-fe77-44af-a342-289257fe8d12/7386d5b7-fe77-44af-a342-289257fe8d122.gif)
![WCF從理論到實踐(7)消息交換模式_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/7386d5b7-fe77-44af-a342-289257fe8d12/7386d5b7-fe77-44af-a342-289257fe8d123.gif)
![WCF從理論到實踐(7)消息交換模式_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/7386d5b7-fe77-44af-a342-289257fe8d12/7386d5b7-fe77-44af-a342-289257fe8d124.gif)
![WCF從理論到實踐(7)消息交換模式_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/7386d5b7-fe77-44af-a342-289257fe8d12/7386d5b7-fe77-44af-a342-289257fe8d125.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、WCF從理論到實踐(7):消息交換模式本文的出發(fā)點 通過閱讀本文,您能理解以下知識: 1. WCF定義了哪幾種消息交換模式? 2. One-Way Calls 3. Request/Reply 4. Duplex 5. 用示例來解析WCF的消息交換模式 本文適合的讀者 本文涉及到了SOA中的消息交換的基礎概念,需要一些初級的Xml Web Service和分布式系統(tǒng)開發(fā)的經(jīng)驗,最好理解WCF架構 WCF定義了哪幾種消息交換模式? WCF定義了三種消息交換方式 ,分別為: 1. One-Way Calls 2. Request/Reply 3. Duplex One-Way Calls 在幾種消
2、息交換模式中,one-way calls是最沒良心的,對于客戶端,one-way calls就如肉包子打狗,有去無回。下面的圖示給出這種交換模型的特征: 在這種交換模式中,存在著如下的特征 1. 沒有返回值,返回類型只能為void 2. 不能包含ref或者out類型的參數(shù) 3. 只有客戶端發(fā)起請求,服務端并不會對請求進行回復。 通過設置OperationContract的IsOneWay=True可以將滿足要求的方法設置為這種消息交換模式,方法如下: OperationContract(IsOneWay=true) void Test(int intVal); 上面的代碼,就是將方法Test設
3、置成為了one-way call的消息交換模式,注意如果Test方法的返回類型不是void或者帶有ref或者out類型的參數(shù),都會拋出異常InvalidOperationException,如下面列表中的方法均不能被聲明為one-way模式 int Test(int intVal); int Test(); int Test(); void Test(ref int intVal); void Test(out int intVal); Request/Reply request/reply比起one-way來說,就更懂得禮尚往來,它是缺省的消息交換模式,類似于http協(xié)議中的請求/響應模型。
4、下面的圖示給出這種交換模式的特征: 這種交換模式是使用最多的一中,它有如下特征: 1. 調用服務方法后需要等待服務的消息返回,即便該方法返回 void 類型 2. 相比Duplex來講,這種模式強調的是客戶端的被動接受,也就是說客戶端接受到響應后,消息交換就結束了。 3. 在這種模式下,服務端永遠是服務端,客戶端就是客戶端,職責分明。 它是缺省的消息交換模式,設置OperationContract便可以設置為此種消息交換模式 OperationContrac void Test(int intVal); 注意,盡管Test方法返回為void,但Server也會生成reply響應并發(fā)送給clie
5、nt.有來有往是這種模式的特征。 Duplex 這種交換模式比起上面兩種,比較復雜,它和request/reply模式類似,也是有來有往,但處理過程卻比request/reply要復雜,因為它可以在處理完請求之后,通過請求客戶端中的回調進行響應操作,這種模式的圖示為: 注意,這種方式和request/reply方式的圖示也很類似,當二者存在著至關重要的不同,它在客戶端也有監(jiān)聽節(jié)點,在callback的時候,服務器和客戶端的角色會進行交換,服務端此時成了嚴格意義上的客戶端,而客戶端此時能接受服務端的callback請求,所以成為了服務端。呵呵,辯證法,都拗口死了,當事實就是這種,就像對與錯一樣,
6、會相互轉換,失敗是成功之母,而成功是失敗之源。廢話少說,Duplex的特征主要包括 1. 消息交換過程中,服務端和客戶端角色會發(fā)生調換 2. 服務端處理完請求后,返回給客戶端的不是reply,而是callback請求。 打個比方,Reqeust/Reply方式像是搓澡,1個管搓,1個被搓 而duplex像是拳擊,兩個人都會出拳 Duplex模式對Bindding有特殊的要求,它要求支持Duplex MEP(Message Exchange Pattern),如WSDualHttpBinding和NetTcpBinding,有關Binding的介紹請參見 用示例來解析WCF的消息交換模式 建立示
7、例的步驟不做具體闡述,下面看一下項目的最終結構: 下表說明各個項目的作用 項目名稱項目作用包含文件定義WCF服務端和客戶端共同使用的Contract接口IOneWayJob.cs INormalJob.cs IJob.cs 實現(xiàn)WCF服務的ContractOneWayJob.cs NormalJob.cs 一個Console應用程序,用于承載WCF服務端Program.cs 一個用于WebSite,用于承載WCF服務。是例外一中HostOnewayService.svc NormalJobService.svc JobService.svc WCF客戶端,一個Console應用程序Oneway
8、Proxy.cs NormalJobProxy.cs DuplexProxy.cs MyCallback.cs Program.cs 下面就看下如何定義消息交換模式為one-way的Contract接口 而IOneWayJob的實現(xiàn)類代碼為: usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingJillzhang.Messaging.Contract;namespaceJillzhang.Messaging.ServicepublicclassOneWayJob:IOneWayJo
9、bpublicvoidDo(stringjobName)System.Diagnostics.Stopwatchwatcher=newSystem.Diagnostics.Stopwatch();watcher.Start();System.Threading.Thread.Sleep(1000);Console.WriteLine(服務+AppDomain.CurrentDomain.FriendlyName+執(zhí)行任務:+jobName);watcher.Stop();Request/reply的Contract接口定義如下: 而INormalJob的實現(xiàn)代碼如下: usingSystem;
10、usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingJillzhang.Messaging.Contract;namespaceJillzhang.Messaging.ServicepublicclassNormalJob:INormalJobpublicstringDo(stringjobName)trySystem.Diagnostics.Stopwatchwatcher=newSystem.Diagnostics.Stopwatch();watcher.Start();System.Threadin
11、g.Thread.Sleep(1000);Console.WriteLine(服務+AppDomain.CurrentDomain.FriendlyName+執(zhí)行任務:+jobName);watcher.Stop();return成功;catchreturn失敗;Duplex的交換模式需要現(xiàn)定義Callback的Contract接口,如下: 而服務端的Contract接口為: Duplex的Contract實現(xiàn)為: usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingJillzha
12、ng.Messaging.Contract;usingSystem.ServiceModel;namespaceJillzhang.Messaging.ServiceServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)publicclassJob:IJobpublicstringDo(stringjobName)tryICallbackcallback=OperationContext.Current.GetCallbackChannel();System.Diagnostics.Stopwatchwatcher=newSystem
13、.Diagnostics.Stopwatch();watcher.Start();System.Threading.Thread.Sleep(1000);Console.WriteLine(服務+AppDomain.CurrentDomain.FriendlyName+執(zhí)行任務:+jobName);watcher.Stop();callback.Done(int)watcher.ElapsedMilliseconds);return成功;catchreturn失敗;下面,我們來看一下,如何創(chuàng)建承載服務的應用程序,首先在app.config做如下配置 而Host的代碼如下: 而客戶端的配置文件,
14、如下: xmlversion=1.0encoding=utf-8?netTcpBindingbindingsidentityendpointidentityendpointidentityendpointclientconfiguration需要注意的是:在設定Duplex模式時,如果服務端采用的是WsDualHttpBinding,而不是本文中的NetTcpBinding,最好指定以下clientBaseAddress,默認情況下,clientBaseAddress會嘗試用端口,可通常情況端口都是被占用,你需要設置一個其他端口。 因為回調的Contract實現(xiàn)是在客戶端的,所以需要在客戶端實
15、現(xiàn)個ICallback實現(xiàn),代碼如下: 下面是客戶端調用的代碼: 客戶端代碼usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingJillzhang.Messaging.Contract;namespaceJillzhang.Messaging.ClientclassProgramstaticvoidMain(stringargs)Programp=newProgram();p.OneWayCall();p.NormalCall();p.DuplexCall();Console.Re
16、ad();voidDuplexCall()tryMyCallbackcallback=newMyCallback();IJobws=newJobClient(newSystem.ServiceModel.InstanceContext(callback);Console.WriteLine(-DuplexCalls-);Console.WriteLine(開始調用服務);stringresult=ws.Do(duplexjob);Console.WriteLine(收到返回信息:+result);Console.WriteLine(-);Console.WriteLine(rnrnrn);ca
17、tch(Exceptionex)Console.WriteLine(ex.Message);voidOneWayCall()tryConsole.WriteLine(-One-WayCalls-);IOneWayJobws=newOneWayJobClient();ws.Do(one-wayjob);Console.WriteLine(請求完成!);Console.WriteLine(-);Console.WriteLine(rnrnrn);catch(Exceptionex)Console.WriteLine(ex.Message);voidNormalCall()tryConsole.WriteLine(-Request/ReplyCalls-);INormalJobws=newNormalJobClie
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 讓課堂充滿生機與活力
- 2025年槍托項目可行性研究報告
- 2025年度航空航天裝備研發(fā)合作合同
- 冷鮮肉設備采購合同范本
- 2025年度建筑吊籃租賃與職業(yè)健康合同
- 智慧農(nóng)業(yè)項目合同范本
- 出租農(nóng)田養(yǎng)殖合同范本
- 臨時聘用會計合同范本
- 前期洽談合同范例
- 公司電力施工合同范本
- VDA6.3 2023過程審核教材
- 高職應用語文教程(第二版)教案 3管晏列傳
- 高中物理《光電效應》
- 烹飪實訓室安全隱患分析報告
- 《金屬加工的基礎》課件
- 運輸行業(yè)春節(jié)安全生產(chǎn)培訓 文明駕駛保平安
- 體驗式沙盤-收獲季節(jié)
- 找人辦事協(xié)議
- 老年護理陪護培訓課件
- 醬香型白酒工廠設計
- 第3章 環(huán)境感知技術
評論
0/150
提交評論