欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在C#中使用MSMQ的方法

 更新時間:2021年01月25日 11:36:57   作者:碼農(nóng)譯站  
這篇文章主要介紹了在C#中使用MSMQ的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

MSMQ (Microsoft消息隊列)是Windows中默認可用的消息隊列。作為跨計算機系統(tǒng)發(fā)送和接收消息的可靠方法,MSMQ提供了一個可伸縮、線程安全、簡單和使用方便的隊列,同時為你提供了在Windows數(shù)據(jù)庫中持久化消息的機會。MSDN指出:“消息隊列(MSMQ)技術使在不同時間運行的應用程序能夠在可能暫時離線的異構網(wǎng)絡和系統(tǒng)之間進行通信。應用程序將消息發(fā)送到隊列并從隊列讀取消息。”

在使用MSMQ時,通常有兩個不同的應用程序——發(fā)送者和接收者。當消息由發(fā)送者發(fā)送時,接收者應用程序不需要處于執(zhí)行狀態(tài)——消息實際上存儲在由主機操作系統(tǒng)維護的隊列中,當接收方應用程序需要它們時,這些消息就會脫離隊列。

創(chuàng)建一個隊列

你可以通過控制面板上的“打開或關閉Windows功能”選項打開你系統(tǒng)中的MSMQ。在系統(tǒng)中安裝了MSMQ之后,創(chuàng)建隊列就很簡單了。只要到“我的電腦”,右擊并選擇管理。在“計算機管理”窗口中,你可以從“消息隊列”節(jié)點創(chuàng)建一個新隊列。還可以通過編程方式創(chuàng)建隊列。 

C#中的MSMQ  

要使用MSMQ,你需要引入System.Messaging命名空間。要以編程方式創(chuàng)建隊列,需要利用MessageQueue類的Create方法。下面的代碼片段說明了這一點。

MessageQueue.Create(@".\Private$\IDG");

要創(chuàng)建隊列并向其發(fā)送消息,可以使用以下代碼片段:

messageQueue = new MessageQueue(@".\Private$\IDG");
messageQueue.Label = "This is a test queue.";
messageQueue.Send("This is a test message.", "IDG");

現(xiàn)在,假設你想檢查隊列是否存在,如果存在,則發(fā)送一條消息給它。如果隊列不存在,你可能希望創(chuàng)建一個新隊列,然后向它發(fā)送消息。這正是下面的代碼清單所做的。

static void Main(string[] args)
{
  MessageQueue messageQueue = null;
  string description = "This is a test queue.";
  string message = "This is a test message.";
  string path = @".\Private$\IDG";
  try
  {
    if (MessageQueue.Exists(path))
    {
      messageQueue = new MessageQueue(path);
      messageQueue.Label = description;
    }
    else
    {
      MessageQueue.Create(path);
      messageQueue = new MessageQueue(path);
      messageQueue.Label = description;
    }
    messageQueue.Send(message);
  }
  catch
  {
    throw;
  }
  finally
  {
    messageQueue.Dispose();
  }
}

下面的代碼清單演示了如何使用c#處理存儲在消息隊列中的消息。

private static List<string> ReadQueue(string path)
{
  List<string> lstMessages = new List<string>();
  using (MessageQueue messageQueue = new MessageQueue(path))
  {
    System.Messaging.Message[] messages = messageQueue.GetAllMessages();
    foreach (System.Messaging.Message message in messages)
    {
      message.Formatter = new XmlMessageFormatter(
      new String[] { "System.String, mscorlib" });
      string msg = message.Body.ToString();
      lstMessages.Add(msg);
    }
  }
  return lstMessages;
}

接下來,可以調(diào)用ReadQueue方法來檢索存儲在消息隊列中的消息,如下面的代碼片段所示。

string path = @".\Private$\IDG";
List<string> lstMessages = ReadQueue(path);

你還可以在消息隊列中存儲對象。例如,假設你需要將日志消息存儲到隊列中。日志消息存儲在LogMessage類的一個實例中,該實例包含與日志消息的詳細信息相關的必要屬性。下面是LogMessage類——我只使用了兩個屬性來使它變得簡單。

public class LogMessage
{
  public string MessageText { get; set; }
  public DateTime MessageTime { get; set; }
}

你應該修改LogMessage類,以包含其他必要的屬性,例如,消息嚴重性等。下面的方法說明了如何將LogMessage類的實例存儲到消息隊列中。

private static void SendMessage(string queueName, LogMessage msg)
{
  MessageQueue messageQueue = null;
  if (!MessageQueue.Exists(queueName))
    messageQueue = MessageQueue.Create(queueName);
  else
    messageQueue = new MessageQueue(queueName);
  try
  {
    messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(LogMessage) });
    messageQueue.Send(msg);
  }
  catch
  {
    //Write code here to do the necessary error handling.
  }
  finally
  {
    messageQueue.Close();
  }
}

下面的代碼片段說明了如何創(chuàng)建LogMessage類的實例,向其填充數(shù)據(jù),然后調(diào)用SendMessage方法來存儲在消息隊列中創(chuàng)建的實例。

LogMessage msg = new LogMessage()
{
  MessageText = "This is a test message.",
  MessageTime = DateTime.Now
};
SendMessage(@".\Private$\IDGLog", msg);

下面的代碼清單演示了如何讀取存儲在消息隊列中的LogMessage實例。

private static LogMessage ReceiveMessage(string queueName)
{
  if (!MessageQueue.Exists(queueName))
    return null;
  MessageQueue messageQueue = new MessageQueue(queueName);
  LogMessage logMessage = null;
  try
  {
    messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(LogMessage) });
    logMessage = (LogMessage)messageQueue.Receive().Body;
  }
  catch { }
  finally
  {
    messageQueue.Close();
  }
  return logMessage;
}

以上就是在C#中使用MSMQ的方法的詳細內(nèi)容,更多關于c# 使用msmq的資料請關注腳本之家其它相關文章!

相關文章

最新評論