版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、WCF分布式開發(fā)步步為贏(13):WCF服務(wù)離線操作與消息隊(duì)列MSMQ 所屬分類: WCF分布式開發(fā)步步為贏, SOA and EAI 之前曾經(jīng)寫過(guò)一個(gè)關(guān)于MSMQ消息隊(duì)列的文章:WCF分布式開發(fā)必備知識(shí)(1):MSMQ消息隊(duì)列 ,當(dāng)時(shí)的目的也是用它來(lái)作為學(xué)習(xí)WCF 消息隊(duì)列MSMQ編程的基礎(chǔ)文章。在那篇文章里,我們?cè)敿?xì)介紹了MSMQ消息隊(duì)列的基本概念、安裝、部署、開發(fā)、調(diào)試等相關(guān)問(wèn)題。今天我們來(lái)學(xué)習(xí)WCF分布式開發(fā)步步為贏(13):WCF服務(wù)離線操作與消息隊(duì)列MSMQ。在WCF框架下使用MSMQ消息隊(duì)列服務(wù)編程。 這里我會(huì)給出一個(gè)使用WCF MSMQ實(shí)現(xiàn)離線請(qǐng)求的DEMO示例程序。 全文結(jié)構(gòu)
2、是:【1】MSMQ基本概念【2】WCF消息隊(duì)列MSMQ的優(yōu)勢(shì)【3】WCF 消息隊(duì)列MSMQ通信框架【4】安裝配置注意事項(xiàng)【5】示例代碼 【總結(jié)】【1】MSMQ基本概念:簡(jiǎn)要回顧一下MSMQ的基本概念,詳細(xì)的你們可以參考WCF分布式開發(fā)必備知識(shí)(1):MSMQ消息隊(duì)列。 MSMQ全稱MicroSoft Message Queue,微軟消息隊(duì)列,是在多個(gè)不同的應(yīng)用之間實(shí)現(xiàn)相互通信的一種異步傳輸模式,相互通信的應(yīng)用可以分布于同一臺(tái)機(jī)器上,也可以分布于相連的網(wǎng)絡(luò)空間中的任一位置。它的實(shí)現(xiàn)原理是:消息的發(fā)送者把自己想要發(fā)送的信息放入一個(gè)容器中(我們稱之為Message),然后把它保存至一個(gè)系統(tǒng)公用空間的
3、消息隊(duì)列(Message Queue)中;本地或者是異地的消息接收程序再?gòu)脑撽?duì)列中取出發(fā)給它的消息進(jìn)行處理。【2】WCF消息隊(duì)列MSMQ的優(yōu)勢(shì): 消息隊(duì)列MSMQ的優(yōu)點(diǎn):穩(wěn)定、消息優(yōu)先級(jí)、脫機(jī)能力以及安全性,有保障的消息傳遞和執(zhí)行許多業(yè)務(wù)處理的可靠的防故障機(jī)制。 因此消息隊(duì)列是實(shí)現(xiàn)SOA面向服務(wù)架構(gòu)的重要組件之一。WCF框架提供了和MSMQ集成與擴(kuò)展的能力。這一點(diǎn)也是WCF在特性中明確指出的。MSMQ支持離線消息模式,而且在WCF框架下,提供了基于http橋的internet網(wǎng)絡(luò)隊(duì)列服務(wù)的調(diào)用擴(kuò)展。和MSMQ框架的結(jié)合和擴(kuò)展,使得WCF服務(wù)具有的新的特點(diǎn):【2.1】Availabiliy:可用
4、性。這個(gè)是MSMQ離線消息的一種體現(xiàn)。客戶單和服務(wù)端不需要實(shí)時(shí)進(jìn)行連接,然后進(jìn)行消息的交互.WCF 客戶端可以發(fā)送請(qǐng)求到離線服務(wù)端,服務(wù)上線以后在相應(yīng)客戶端請(qǐng)求。【2.2】Disjoint:分解。可以講工作分解為多個(gè)操作,一次放入隊(duì)列。改善系統(tǒng)的可用性和吞吐量?!?.3】Compensating:補(bǔ)償。對(duì)于多業(yè)務(wù)事務(wù),可以提供單獨(dú)的事物提供其它事務(wù)失敗的善后處理?!?.4】Load Leveling:負(fù)載平衡??梢园堰^(guò)載的客戶端請(qǐng)求放入隊(duì)列,空閑的時(shí)候進(jìn)行處理,平衡系統(tǒng)的吞吐量,改善性能。【3】WCF 消息隊(duì)列MSMQ通信框架: WCF使用NetMsmqBinding來(lái)支持消息隊(duì)列通信。當(dāng)客戶
5、端調(diào)用服務(wù)時(shí),客戶端消息會(huì)被封裝為MSMQ消息,發(fā)送懂到特定的消息隊(duì)列。服務(wù)端宿主在運(yùn)行轉(zhuǎn)臺(tái)下會(huì),啟動(dòng)通道偵聽器,來(lái)檢測(cè)消息隊(duì)列消息,如果發(fā)現(xiàn)對(duì)應(yīng)的消息,會(huì)從隊(duì)列里取出消息,使用分發(fā)器轉(zhuǎn)發(fā)給對(duì)應(yīng)的服務(wù)。具體的通信架構(gòu)如圖: 如果宿主離線,消息會(huì)被放入隊(duì)列,等待下一次宿主聯(lián)機(jī)時(shí),在執(zhí)行消息分發(fā)處理,給指定的WCF服務(wù)?!?】安裝配置注意事項(xiàng): MSMQ隊(duì)列幾種常見的類型就是:1.公共隊(duì)列:在整個(gè)消息隊(duì)列網(wǎng)絡(luò)中復(fù)制,并且有可能由網(wǎng)絡(luò)連接的所有站點(diǎn)訪問(wèn)。 2.專用隊(duì)列:不在整個(gè)網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計(jì)算機(jī)上可用。專用隊(duì)列只能由知道隊(duì)列的完整路徑名或標(biāo)簽的應(yīng)用程序訪問(wèn)。 3.管理隊(duì)列:
6、包含確認(rèn)在給定“消息隊(duì)列”網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的消息。指定希望 MessageQueue 組件使用的管理隊(duì)列(如果有的話)。 4.響應(yīng)隊(duì)列:包含目標(biāo)應(yīng)用程序接收到消息時(shí)返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueue 組件使用的響應(yīng)隊(duì)列(如果有的話)。 這里有幾個(gè)問(wèn)題要注意,以前很多人也在配置MSMQ開發(fā)環(huán)境的時(shí)候遇到這個(gè)問(wèn)題。Xp環(huán)境下作MSMQ配置開發(fā)有很多限制。這里算是做個(gè)總結(jié)供大家參考:1.公共隊(duì)列需要域控制器DC Domain Controller; 2.私有隊(duì)列與托管的機(jī)器同屬本地,不需要DC,成為工作組安裝; 3.私有隊(duì)列需要禁用安全模式:工作組安裝與安全,安全設(shè)
7、置需要客戶端提供證書,MSMQ傳輸安全需要使用Windows安全,這里需要使用AD活動(dòng)目錄。 【5】示例代碼 : 今天的示例DEMO程序代碼,主要演示的是WCF如何配置和開發(fā)一個(gè)MSMQ服務(wù)程序,實(shí)現(xiàn)WCF離線操作,MSMQ事務(wù)的部分由于內(nèi)容較多,這里暫時(shí)不涉及。我們只討論WCF離線操作。(1)WCF服務(wù)代碼: 值得注意的WCF的操作要被定義為單向操作,因?yàn)楸举|(zhì)上其符合單向操作的特征。異步,離線。無(wú)返回值。配置操作契約的時(shí)候要添加IsOneWay屬性。代碼如下:/1.服務(wù)契約ServiceContract(Namespace=publicinterfaceIWCFMSMQService/操作契
8、約,必須為單向操作OperationContract(IsOneWay=true)voidSayHelloMSMQ(stringname);/2.服務(wù)類,繼承接口。實(shí)現(xiàn)服務(wù)契約定義的操作publicclassWCFMSMQService:IWCFMSMQServicepublicWCFMSMQService()Console.WriteLine(WCFMSMQServiceinstancewascreatedat:0,DateTime.Now);/實(shí)現(xiàn)接口定義的方法publicvoidSayHelloMSMQ(stringname)Console.WriteLine(Hello!0,Calli
9、ngWCFMSMQServiceOperationat:1,name,DateTime.Now);(2)宿主: 我的開發(fā)環(huán)境為XP專業(yè)版,工作組模式。這里有個(gè)問(wèn)題要注意,就是安全。MSMQ默認(rèn)的安全模式是需要證書支持。我們必須在宿主配置文件里給配置為none,簡(jiǎn)化操作,因?yàn)樽C書需要MSMQ域管理器。MSMQ傳輸安全需要Windows安全,這個(gè)又需要AD活動(dòng)目錄支持,工作組模式下不支持,因此這里我們都設(shè)置為none。代碼如下:(3)客戶端: 運(yùn)行客戶端,添加服務(wù)引用,這里客戶端的配置文件要做修改,安全模式也修改和宿主對(duì)應(yīng),設(shè)置為none。客戶端測(cè)試方案是每個(gè)2秒調(diào)用一次服務(wù)請(qǐng)求。我們這里在宿主端
10、打印了時(shí)間??蛻舳税l(fā)送消息完畢以后,宿主暫時(shí)不啟動(dòng)。等待一段時(shí)間。在啟動(dòng)宿主,觀察宿主打印的消息。代碼如下:/HTTPNetMsmqBinding_IWCFMSMQServiceWCFMSMQServiceClientwcfServiceProxy=newWCFMSMQServiceClient(NetMsmqBinding_IWCFMSMQService);/通過(guò)代理調(diào)用SayHello服務(wù),這里及時(shí)服務(wù)調(diào)用服務(wù)失敗,消息會(huì)發(fā)送到隊(duì)列里進(jìn)行緩存。Console.WriteLine(WCFFirstCallat:0,DateTime.Now);wcfServiceProxy.SayHelloM
11、SMQ(Frank);Thread.Sleep(2000);/客戶端休眠兩秒,繼續(xù)下一次調(diào)用Console.WriteLine(WCFSecondCallat:0,DateTime.Now);wcfServiceProxy.SayHelloMSMQ(FrankXu);Thread.Sleep(2000);/客戶端休眠兩秒,繼續(xù)下一次調(diào)用Console.WriteLine(WCFLastCallat:0,DateTime.Now);wcfServiceProxy.SayHelloMSMQ(FrankXuLei);(4)運(yùn)行結(jié)果: 首先是客戶端發(fā)送到的消息,我們可以再計(jì)算機(jī)-管理-服務(wù)-專用隊(duì)列里
12、查看到,如圖: 以前的服務(wù)要求我們必須啟動(dòng)宿主,不然會(huì)出現(xiàn)連接錯(cuò)誤。這里為了測(cè)試,停留約4分鐘后,我們啟動(dòng)宿主。觀察宿主打印的消息: 宿主在聯(lián)機(jī)以后響應(yīng)了客戶端的調(diào)用操作?!究偨Y(jié)】 本節(jié)文章主要講解的是WCF 如何使用MSMQ開發(fā)離線服務(wù)操作。這里除了回顧了MSMQ的基本概念,還介紹了WCF服務(wù)使用MSMQ的通信框架的優(yōu)勢(shì)和特點(diǎn)。最后給出了基于WCF 消息隊(duì)列的離線服務(wù)調(diào)用實(shí)現(xiàn)的過(guò)程。 WCF 對(duì)MSMQ消息隊(duì)列的支持和擴(kuò)展,大大提高了WCF服務(wù)調(diào)用的伸縮性和靈活性。本文由于開發(fā)環(huán)境的關(guān)系,沒(méi)有給出公共隊(duì)列的開發(fā)實(shí)現(xiàn)過(guò)程。另外在WCF 消息隊(duì)列開發(fā)過(guò)程中,大家要做注意。(1)在服務(wù)宿主端啟動(dòng)宿主,要做隊(duì)列存在的判斷,以免出現(xiàn)讀取錯(cuò)誤。(2)隊(duì)列服務(wù)涉及到安全的問(wèn)題,認(rèn)證和消息加密,簽名,需要證
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒魔方課程設(shè)計(jì)
- 學(xué)生用工合同范本3篇
- 媒體行業(yè)視頻剪輯師合同模板3篇
- 全新公司單方面向員工解除合同3篇
- 公共安全師徒合同3篇
- 公租房選房抽簽全權(quán)代理協(xié)議3篇
- 托班簡(jiǎn)單游戲課程設(shè)計(jì)
- 機(jī)械原理課程設(shè)計(jì)曲柄
- 新聞jsp課程設(shè)計(jì)
- 油氣勘探課程設(shè)計(jì)答案
- 小班數(shù)學(xué)《認(rèn)識(shí)1到10的數(shù)字》課件
- 手工花項(xiàng)目策劃書
- 個(gè)人理財(cái)(西安歐亞學(xué)院)智慧樹知到期末考試答案2024年
- 醫(yī)院內(nèi)審制度
- 循環(huán)系統(tǒng)病癥的臨床思維
- 實(shí)現(xiàn)基于單片機(jī)的農(nóng)業(yè)監(jiān)測(cè)控制系統(tǒng)
- 總裁辦公室度工作總結(jié)
- 中醫(yī)養(yǎng)生的保護(hù)五官功能
- 2023年中考語(yǔ)文二輪復(fù)習(xí):標(biāo)點(diǎn)符號(hào) 真題練習(xí)題匯編(含答案解析)
- 2024年南京信息職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年汽配行業(yè)分析報(bào)告
評(píng)論
0/150
提交評(píng)論