日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MSMQ使用WCF正確實現(xiàn)技巧講解

在了解了WCF之后,大家應(yīng)該會被他強(qiáng)大的功能,突出的優(yōu)勢所深深吸引。它能夠為我們輕松的打造一個跨平臺的安全性極強(qiáng)的解決方案。在這里我們會為大家介紹一下MSMQ使用WCF的實現(xiàn)方法。#t#

在windows平臺上,MSMQ是***的消息傳遞中間件,它是一種高速、異步、可靠的通信機(jī)制,當(dāng)我們在Internet上的兩個應(yīng)用需要交換信息時,使用這樣的中間件可能是必須的。

WCF完全面向SOA,大大簡化了以往風(fēng)格迥異的多種分布式解決方案。剛好,最近的一個項目需要使用SOA架構(gòu),而底層需要使用MSMQ作為消息傳遞基礎(chǔ)設(shè)施,所以這兩天研究了一下,MSMQ使用WCF的方法。下面以一個例子說明。

首先定義服務(wù)端和客戶端賴以溝通的Contract,通常將這些Contact定義在一個單獨的dll中,如此可被服務(wù)端和客戶端引用。我們假設(shè)一個簡單的Contract,即一個接口ICalculate:

 
 
 
  1. [ServiceContract] 
  2. [ServiceContract] 
  3. public interface ICalculate 
  4. [OperationContract(IsOneWay=true)] 
  5. void DealOrder(string orderID); 
  6. }

例子中,我們將ICalculate定義在WcfLib.dll中。

服務(wù)端需要實現(xiàn)ICalculate接口:

 
 
 
  1. public class Calculator : ICalculate 
  2. public void DealOrder(string orderID) 
  3. Program.FileLogger.Log(orderID); 
  4. }

接下來,服務(wù)端就可以以MSMQ的方式發(fā)布該服務(wù)了,這個可以在配置文件App.Config中進(jìn)行配置:

 
 
 
  1. < ?xml version="1.0" encoding="utf-8" ?> 
  2. < configuration> 
  3. < system.serviceModel> 
  4. < services> 
  5. < service name="WcfTest.Calculator"> 
  6. < endpoint address="net.msmq://localhost/private/WcfTest" 
  7. binding="netMsmqBinding" bindingConfiguration="msmq" 
  8. contract="WcfLib.ICalculate"/> 
  9. < /service> 
  10. < /services> < bindings> 
  11. < netMsmqBinding> 
  12. < binding name="msmq"> 
  13. < security mode ="None"/> 
  14. < /binding> 
  15. < /netMsmqBinding> 
  16. < /bindings> 
  17. < /system.serviceModel> 
  18. < /configuration> 

配置中紅色部分標(biāo)志了WCF的“ABC”,address表明了將使用本地的名為WcfTest的專用隊列。請注意,binding配置后有一個bindingConfiguration,說明這個binding需要更高級的配置,相應(yīng)的配置段在bindings Segment中,由于示例中使用的消息隊列沒有使用域模式,所以security mode 設(shè)為None,該配置會將MsmqAuthenticationMode屬性設(shè)置為MsmqAuthenticationMode.None。另外,配置中顯示的WcfTest專用隊列需要被設(shè)置為“事務(wù)性”,在創(chuàng)建隊列的時候可以選擇此屬性。

配置完成后,我們可以啟動MSMQ使用WCF的服務(wù)了:

 
 
 
  1. ServiceHost serviceHost = new ServiceHost(typeof(Calculator)); 
  2. serviceHost.Open(); 

再來看客戶端,非常簡單,首先在App.Config中設(shè)置“ABC”(與服務(wù)端一致):

 
 
 
  1. < ?xml version="1.0" encoding="utf-8" ?> 
  2. < configuration> 
  3. < system.serviceModel> 
  4. < client> 
  5. < endpoint name="CalculatorClient" 
  6. address="net.msmq://localhost/private/WcfTest" 
  7. binding="netMsmqBinding" bindingConfiguration="msmq" 
  8. contract="WcfLib.ICalculate"> 
  9. < /endpoint> 
  10. < /client> 
  11. < bindings> 
  12. < netMsmqBinding> 
  13. < binding name="msmq"> 
  14. < security mode ="None"/> 
  15. < /binding> 
  16. < /netMsmqBinding> 
  17. < /bindings> 
  18. < /system.serviceModel> 
  19. < /configuration> 

在添加了對WcfLib.dll的引用后,接下來就可以調(diào)用服務(wù)了:

 
 
 
  1. ChannelFactory< WcfLib.ICalculate> channelFactory =
     new ChannelFactory< ICalculate>("CalculatorClient"); 
  2. ICalculate calculate = channelFactory.CreateChannel(); 
  3. calculate.DealOrder(this.textBox1.Text); 

MSMQ使用WCF作為消息傳遞基礎(chǔ)設(shè)施后,有這樣一個好處,當(dāng)Internet不可用或者服務(wù)端沒有啟動時,客戶端仍然可以調(diào)用DealOrder方法將消息發(fā)送,當(dāng)然,消息會暫存在隊列中,等網(wǎng)絡(luò)恢復(fù)或服務(wù)端啟動后,這些隊列中的消息將會被處理。


分享名稱:MSMQ使用WCF正確實現(xiàn)技巧講解
分享地址:http://www.5511xx.com/article/copsjje.html