成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF MSMQ隊(duì)列基本概念簡(jiǎn)述

開發(fā) 開發(fā)工具
WCF MSMQ隊(duì)列的類型可以被分為兩種,一種為事務(wù)性隊(duì)列,而另外一種則為非事務(wù)性隊(duì)列。接下來(lái)我們將會(huì)針對(duì)這方面知識(shí)做一個(gè)詳細(xì)介紹。

今天,我們將會(huì)在這篇文章中為大家詳細(xì)介紹一下關(guān)于WCF MSMQ隊(duì)列的一些基本特性。希望對(duì)于初學(xué)者來(lái)說(shuō),可以從這里介紹的內(nèi)容中獲得一些幫助,并能夠充分掌握這些基本技巧,以方便我們的實(shí)際應(yīng)用。

WCF MSMQ隊(duì)列中共有兩種類型,事務(wù)性隊(duì)列(transactional queue)會(huì)將消息持久(persiste)存儲(chǔ)到磁盤中,即便服務(wù)器當(dāng)機(jī)(shutdown)、重啟(reboot)或崩潰(crash),消息依然可以在系統(tǒng)恢復(fù)后被讀取。同時(shí),消息發(fā)布、獲取和刪除都在環(huán)境事務(wù)范圍內(nèi),從而確保消息的可靠性。我們還可以使用 TransactionScope 將環(huán)境事務(wù)傳遞給隊(duì)列,否則隊(duì)列會(huì)自動(dòng)創(chuàng)建一個(gè)內(nèi)部事務(wù)。非事務(wù)性隊(duì)列(nontransactional volatile queues)只是將消息存在內(nèi)存,不會(huì)使用磁盤進(jìn)行持久存儲(chǔ),且不會(huì)使用事務(wù)來(lái)保護(hù)對(duì)消息的操作。一但服務(wù)器發(fā)生問(wèn)題,或者調(diào)用方出現(xiàn)異常,消息都會(huì)丟失。

  1. // 創(chuàng)建事務(wù)性隊(duì)列  
  2. MessageQueue.Create(@".\private$\myqueue", true);  
  3. // 創(chuàng)建非事務(wù)性隊(duì)列  
  4. MessageQueue.Create(@".\private$\myqueue"); 

通過(guò)下面的例子我們會(huì)看到事務(wù)失敗時(shí),沒(méi)有任何消息被寫入隊(duì)列。

  1. [ServiceContract]  
  2. public interface IService  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void Test(int i);  
  6. }  
  7. [ServiceBehavior]  
  8. public class MyService : IService  
  9. {  
  10. [OperationBehavior]  
  11. public void Test(int i)  
  12. {  
  13. Console.WriteLine(i);  
  14. }  
  15. }  
  16. public class WcfTest  
  17. {  
  18. public static void Test()  
  19. {  
  20. if (!MessageQueue.Exists(@".\private$\myqueue"))  
  21. {  
  22. MessageQueue.Create(@".\private$\myqueue", true);  
  23. }  
  24. IService client = ChannelFactory<IService>.CreateChannel(  
  25. new NetMsmqBinding(NetMsmqSecurityMode.None),  
  26. new EndpointAddress("net.msmq://localhost/private/myqueue"));  
  27. try  
  28. {  
  29. using (TransactionScope scope = new TransactionScope())  
  30. {  
  31. using (client as IDisposable)  
  32. {  
  33. for (int i = 0; i < 10; i++)  
  34. {  
  35. client.Test(i);  
  36. if (i > 5) throw new Exception();  
  37. }  
  38. }  
  39. scope.Complete();  
  40. }  
  41. }  
  42. catch  
  43. {   
  44. }  
  45. AppDomain.CreateDomain("Server").DoCallBack(delegate  
  46. {  
  47. ServiceHost host = new ServiceHost(typeof(MyService),
    new Uri("net.msmq://localhost/private/myqueue"));  
  48. host.AddServiceEndpoint(typeof(IService), 
    new NetMsmqBinding(NetMsmqSecurityMode.None), "");  
  49. host.Open();  
  50. });  
  51. }  

這里需要對(duì) "消息" 做一個(gè)澄清,當(dāng)客戶端發(fā)出調(diào)用(call)時(shí),調(diào)用會(huì)被轉(zhuǎn)換成 WCF Message,然后被包裝到 MSMQ Message 中。如果客戶端事務(wù)完成提交,那么 MSMQ Message 會(huì)被傳遞到隊(duì)列并存儲(chǔ)起來(lái)。相反,如果事務(wù)失敗,消息會(huì)被丟棄。上面的例子中,我們將多個(gè)調(diào)用放到一個(gè)環(huán)境事務(wù)中,也可以將多個(gè)服務(wù)調(diào)用放到一個(gè)事務(wù)當(dāng)中。如果隊(duì)列服務(wù)不在當(dāng)前機(jī)器上,也就是說(shuō)使用 Public Queue 時(shí),客戶端的消息隊(duì)列組件將承擔(dān) "代理(proxy)" 的角色。客戶端的調(diào)用會(huì)首先存儲(chǔ)到本地隊(duì)列,然后再由本地隊(duì)列轉(zhuǎn)發(fā)給目標(biāo)隊(duì)列。這個(gè)轉(zhuǎn)發(fā)過(guò)程同樣受到事務(wù)保護(hù)。

要是開發(fā)非事務(wù)性消息隊(duì)列服務(wù),需要用到 NetMsmqBinding 的兩個(gè)屬性。將 Durable 設(shè)為 false,表示不使用事務(wù)方式訪問(wèn)消息隊(duì)列。另外還得將 ExactlyOnce 設(shè)為 false,否則會(huì)拋出 InvalidOperationException 異常。

下面例子中,重啟消息隊(duì)列服務(wù)(Message Queuing)后,你會(huì)發(fā)現(xiàn)消息丟失。

  1. [ServiceContract]  
  2. public interface IService  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void Test(int i);  
  6. }  
  7. [ServiceBehavior]  
  8. public class MyService : IService  
  9. {  
  10. public MyService()  
  11. {  
  12. Console.WriteLine("Constructor...");  
  13. }  
  14. [OperationBehavior(TransactionScopeRequired=true)]  
  15. public void Test(int i)  
  16. {  
  17. Console.WriteLine(i);  
  18. }  
  19. }  
  20. public class WcfTest  
  21. {  
  22. public static void Test()  
  23. {  
  24. MessageQueue.Delete(@".\private$\myqueue");  
  25. MessageQueue.Create(@".\private$\myqueue");  
  26. NetMsmqBinding binding1 = new NetMsmqBinding
    (NetMsmqSecurityMode.None);  
  27. binding1.Durable = false;  
  28. binding1.ExactlyOnce = false;  
  29. IService client = ChannelFactory<IService>
    .CreateChannel(binding1,  
  30. new EndpointAddress("net.msmq://localhost/private/myqueue"));  
  31. using (client as IDisposable)  
  32. {  
  33. for (int i = 0; i < 10; i++)  
  34. {  
  35. client.Test(i);  
  36. }  
  37. }  
  38. Console.WriteLine("重啟MSMQ服務(wù),然后按任意鍵繼續(xù)...");  
  39. Console.ReadKey(true);  
  40. AppDomain.CreateDomain("Server").DoCallBack(delegate  
  41. {  
  42. NetMsmqBinding binding2 = new NetMsmqBinding
    (NetMsmqSecurityMode.None);  
  43. binding2.Durable = false;  
  44. binding2.ExactlyOnce = false;  
  45. ServiceHost host = new ServiceHost(typeof(MyService),
    new Uri("net.msmq://localhost/private/myqueue"));  
  46. host.AddServiceEndpoint(typeof(IService), binding2, "");  
  47. host.Open();  
  48. });  
  49. }  

【編輯推薦】

  1. PDA訪問(wèn)WCF實(shí)現(xiàn)重點(diǎn)在過(guò)程
  2. WCF標(biāo)準(zhǔn)終結(jié)點(diǎn)基本概念剖析
  3. WCF回調(diào)操作是雞應(yīng)用技巧講解
  4. WCF元數(shù)據(jù)交換應(yīng)用技巧分享
  5. IIS托管WCF服務(wù)實(shí)際操作中常見錯(cuò)誤分析
責(zé)任編輯:曹凱 來(lái)源: 豆豆網(wǎng)
相關(guān)推薦

2010-03-01 14:50:30

WCF行為類型

2009-12-21 10:27:52

WCF基本概念

2010-02-23 16:32:29

WCF服務(wù)

2010-02-24 17:17:04

WCF宿主環(huán)境

2010-03-01 16:25:07

WCF體系架構(gòu)

2009-12-21 15:33:07

WCF集合元素

2010-03-01 18:04:35

WCF配置綁定

2010-02-25 14:46:31

2010-03-02 11:10:43

WCF標(biāo)準(zhǔn)終結(jié)點(diǎn)

2009-12-21 14:37:14

2010-03-01 16:41:04

WCF數(shù)據(jù)表

2010-03-02 16:22:31

WCF狀態(tài)應(yīng)用

2009-12-21 16:52:02

WCF序列化

2009-12-22 10:16:54

WCF服務(wù)狀態(tài)

2010-03-01 17:57:11

WCF緩存機(jī)制

2011-03-28 11:05:17

ODBC

2010-03-03 15:10:49

第三方Python庫(kù)

2014-04-16 15:11:19

Spark

2012-09-11 14:39:03

Moosefs

2009-03-20 11:46:10

MGCP協(xié)議網(wǎng)關(guān)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人av一区| 亚洲一区影院 | 久草在线在线精品观看 | 亚洲人成人一区二区在线观看 | 精品久久久久久国产 | 国产高清一区二区三区 | 日本午夜一区 | 蜜月va乱码一区二区三区 | 91精品国产高清久久久久久久久 | 日韩免费一区二区 | 金莲网| 一本一道久久a久久精品蜜桃 | 毛片高清 | 中文天堂在线一区 | 婷婷桃色网 | 久久久久一区二区三区 | 欧美a在线 | 国产乱码精品一区二区三区忘忧草 | 国产一级视频在线 | a视频在线| 国产精品永久免费观看 | 日本精品视频在线观看 | 亚洲精品中文在线观看 | 91毛片在线看| 精品九九九 | 国产精品免费在线 | 午夜影院在线观看 | 九九九国产 | 日韩在线不卡视频 | 成在线人视频免费视频 | 国产日韩精品在线 | 99福利网 | 国产电影一区二区 | 国产女人与拘做视频免费 | 国产精品久久久久久久久久久久久 | 天天操网 | 亚洲高清在线 | h视频网站在线观看 | 一级a爱片久久毛片 | 精品欧美一区二区久久久伦 | 精品欧美乱码久久久久久1区2区 |