簡體   English   中英

2個本地應用之間的C#MSMQ未接收到所有已發送的消息

[英]c# MSMQ between 2 local apps not receiving all messages sent

我創建了自己的MSMQ包裝器類,如下所示:

public class MsgQueue
{
    private MessageQueue messageQueue;

    public delegate void ReadMessageDelegate(string message);
    public event ReadMessageDelegate NewMessageAvailable;

    public MsgQueue(string queueName)
    {
        var queuePath = @".\Private$\" + queueName;

        if (!MessageQueue.Exists(queuePath)) MessageQueue.Create(queuePath);

        messageQueue = new MessageQueue(queuePath);
        messageQueue.Label = queueName;
        messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string)});

        messageQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MsgReceivedHandler);
        messageQueue.BeginReceive();
    }

    private void MsgReceivedHandler(object sender, ReceiveCompletedEventArgs e)
    {
        try
        {
            MessageQueue mq = (MessageQueue)sender;
            var message = mq.EndReceive(e.AsyncResult);

            NewMessageAvailable(message.Body.ToString());

            mq.BeginReceive();
        }
        catch (MessageQueueException)
        {
            // Handle sources of MessageQueueException.
        }

        return;
    }

    public void SendMessage(string message)
    {
        messageQueue.Send(message);
    }
}

我在兩個獨立的WinForms應用程序上進行了測試。

單擊按鈕時,第一個應用程序發送文本消息:

private void btn_Click(object sender, EventArgs e)
{          
   var queue = new MsgQueue.MsgQueue("GBMqueue");
   queue.SendMessage("some message text");
}

第二個應用正在偵聽所有傳入消息,然后嘗試對其進行處理:

// declaration
private MsgQueue queue;

// preparation of the queue
private void Form1_Load(object sender, EventArgs e)
{
    queue = new MsgQueue.MsgQueue("GBMqueue");
    queue.NewMessageAvailable += Queue_NewMessageAvailable;
}

// Handler for the incoming messages
private void Queue_NewMessageAvailable(string message)
{
     // Hits here very rarely!!!
}

問題是我可以多次從App1發送消息,但是Queue_NewMessageAvailable處理程序僅捕獲一條隨機消息,而不是第一條-僅發送了一條消息。

不會引發任何異常,只是不會捕獲傳入的消息。

我在這里做錯了什么?

我認為第一個應用程序不應監聽新消息。 它可能帶走了第二個App的消息。 它應該只發送消息。

拆分功能時,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM