<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      在WCF中使用消息隊列

      在一些大型的解決方案中,假設我們的服務沒有辦法一直在線,或者因為這樣那樣的原因宕機了,有沒有什么辦法讓客戶端的影響最小化呢?答案是可以通過消息隊列的方式,哪怕服務是沒有在線的,客戶端依然可以繼續操作。

       

      1. 首先來學習一些消息隊列的基礎知識

      消息隊列默認是沒有安裝的,可以通過下面的方式進行安裝

      image

       

      2. 通過一個小程序來演示一下如何發送和接受消息

      image

              static void SendMessage() {
                  Message msg = new Message("這是我的一個消息");
      
                  string queueName = @".\Private$\SampleQueue";
                  MessageQueue mq = null;
      
                  if (!MessageQueue.Exists(queueName))
                      mq = MessageQueue.Create(queueName);
                  else
                      mq = new MessageQueue(queueName);
      
                  mq.Formatter = new XmlMessageFormatter(new[] { "System.String" });
      
                  mq.Send(msg, "測試消息");
      
                  Console.WriteLine("消息發送成功");
              }

      然后,我們就可以看到這個消息了(通過mmc控制臺)

      [注意]xp和vista或者win 7都屬于桌面操作系統,它們只支持私有隊列。如果是服務器操作系統的話,則還支持公共隊列。

      image

      image image

      image image

      下面看看如何讀取隊列中的消息

       static void ReadMessage() {
                  string queueName = @".\Private$\SampleQueue";
                  MessageQueue mq = new MessageQueue(queueName);
                  mq.Formatter = new XmlMessageFormatter(new[] { "System.String" });
                  Message msg = mq.Receive();
                  Console.WriteLine(msg.Label);
                  Console.WriteLine(msg.Body.ToString());
                  
              }

      image

      上面是一個很簡單的例子,演示了如何發送和接收消息。

       

      下面用一個例子來講解WCF中如何利用消息隊列來實現異步的服務。

      1. 創建契約

      using System;
      using System.ServiceModel;
      using System.Runtime.Serialization;
      
      namespace Contracts
      {
          [ServiceContract]
          public interface IMSMQService
          {
              [OperationContract(IsOneWay = true)]
              void PlaceOrder(OrderEntry entry);
          }
      
          [DataContract]
          public class OrderEntry {
              [DataMember]
              public int OrderID { get; set; }
              [DataMember]
              public DateTime OrderDate { get; set; }
              [DataMember]
              public int Quantity { get; set; }
              [DataMember]        
              public int UnitPrice { get; set; }
      
              public override string ToString()
              {
                  return string.Format(
                      "ID:{0}\tDate:{1}\tQuantity:{2}\tUnitPrice:{3}\t",
                      OrderID,
                      OrderDate,
                      Quantity,
                      UnitPrice);
              }
          }
      
          
      }
      

      2. 實現服務

      using System;
      
      namespace Services
      {
          public class MSMQOrderService:Contracts.IMSMQService
          {
              #region IMSMQService 成員
      
              public void PlaceOrder(Contracts.OrderEntry entry)
              {
                  Console.WriteLine("收到訂單:{0}", entry);
              }
      
              #endregion
          }
      }
      

       

      3. 創建宿主

      using System;
      using System.ServiceModel;
      
      
      namespace Host
      {
          class Program
          {
              static void Main(string[] args)
              {
                  using (ServiceHost host =
                      new ServiceHost(
                          typeof(Services.MSMQOrderService),
                          new Uri("net.msmq://localhost/Private/SampleQueue")
                          ))
                  {
      
                      NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);
                      binding.ExactlyOnce = false;
                      binding.Durable = true;
      
                      host.AddServiceEndpoint(
                          typeof(Contracts.IMSMQService).FullName,
                          binding,
                          "");
      
                      host.Open();
                      Console.WriteLine("服務器已經準備好");
                      Console.Read();
      
                  }
      
              }
          }
      }
      

       

      4. 創建客戶端

      using System;
      using System.ServiceModel;
      
      namespace Client
      {
          class Program
          {
              static void Main(string[] args)
              {
                  NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);
                  binding.ExactlyOnce = false;
                  binding.Durable = true;
      
      
                  ChannelFactory<Contracts.IMSMQService> channel =
                      new ChannelFactory<Contracts.IMSMQService>(
                          binding, new EndpointAddress("net.msmq://localhost/Private/SampleQueue"));
      
                  Contracts.IMSMQService client =
                      channel.CreateChannel();
      
                  client.PlaceOrder(
                      new Contracts.OrderEntry()
                      {
                          OrderID = 1,
                          OrderDate = DateTime.Now,
                          UnitPrice = 10,
                          Quantity = 10
                      });
      
                  Console.WriteLine("發送了一個訂單");
                  Console.Read();
      
              }
          }
      }
      

       

      5. 測試

      image

      image

      很好,我們看到消息發送到了服務器端。但,如果僅僅是這樣,那么使用消息隊列有什么優勢呢?

      我們現在不啟動服務端,而僅僅啟動客戶端。看看是否可以發出訂單

      image

      我們發現,雖然服務沒有開啟來,但是卻依然可以發出訂單。那么這個訂單到哪里去了呢。原來是被存放到了隊列中。如下圖所示

      image

      image

       

      然后,我們再去開服務宿主程序。

      image

      宿主程序會自動讀取消息隊列中的消息,并自動進行處理。此時再次去查看隊列的話,就會發現已經沒有消息了

      image

      posted @ 2016-08-09 11:24  閆寶平  閱讀(546)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品午夜福利在线观看| 国产亚洲精品久久久久秋霞| 国产欧美va欧美va在线| 国产成人啪精品午夜网站| 中文字幕日本六区小电影| 亚洲天堂av在线免费看| 丰满无码人妻热妇无码区| 国产麻豆精品手机在线观看| 免费观看日本污污ww网站69| 国产精品国三级国产专区| 99热成人精品热久久66| 国产老熟女无套内射不卡| 精品中文人妻中文字幕| 亚州少妇无套内射激情视频| 天天做日日做天天添天天欢公交车| 国产网友愉拍精品视频手机| 欧美日韩不卡视频合集| 国产99在线 | 免费| 青青草原网站在线观看| 亚洲日韩性欧美中文字幕| 人妻少妇一区二区三区| 免费VA国产高清大片在线| 国产精品一区二区久久精品| 男人又大又硬又粗视频| 人妻色综合网站| 精品日本免费一区二区三区| 国产激情福利短视频在线| 国产成人欧美综合在线影院| 国产日韩精品免费二三氏| 日韩人妻中文字幕精品| 日韩成人一区二区三区在线观看| 久久精品国产99久久美女| 亚洲国产精品一区二区久| 尹人香蕉久久99天天拍| 日韩高清视频 一区二区| 国产午精品午夜福利757视频播放| 平乡县| 日本道播放一区二区三区| 好男人社区影视在线WWW| 亚洲一区成人在线视频| 亚洲熟妇在线视频观看|