WCF分布式開發(fā)步步為贏(13)WCF服務(wù)離線操作與消息隊(duì)列MSMQ_第1頁(yè)
WCF分布式開發(fā)步步為贏(13)WCF服務(wù)離線操作與消息隊(duì)列MSMQ_第2頁(yè)
WCF分布式開發(fā)步步為贏(13)WCF服務(wù)離線操作與消息隊(duì)列MSMQ_第3頁(yè)
WCF分布式開發(fā)步步為贏(13)WCF服務(wù)離線操作與消息隊(duì)列MSMQ_第4頁(yè)
WCF分布式開發(fā)步步為贏(13)WCF服務(wù)離線操作與消息隊(duì)列MSMQ_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論