如何创建c#程序发送到本地消息队列

本文关键字:队列 消息 程序 何创建 创建 | 更新日期: 2023-09-27 18:09:36

我有一个c#程序,试图发送到我自己的本地Windows消息队列。我已经安装了消息队列,出于绝望,我给了"每个人"在消息队列本身和我试图写的公共队列上的所有访问权。我有一个表单,其中有两个文本框和两个按钮。一双用于发送,另一双用于接收。我点击发送,没有错误,它可以检测到实际上有一个该名称的消息队列。但是send方法似乎在没有将它放入队列的情况下就离开了。谢谢你的帮助!下面是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Messaging;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public MessageQueue myNewPublicQueue;
    private static object lockObject = new object();
    /// <summary>
    /// 
    /// </summary>
    public Form1()
    {
        InitializeComponent();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void buttoSend_Click(object sender, EventArgs e)
    {
        if (MessageQueue.Exists(@".'queuename"))
        {
            myNewPublicQueue = new System.Messaging.MessageQueue(@".'queuename");
            System.Messaging.Message mm = new System.Messaging.Message();
            mm.Body = textBoxSend.Text;
            mm.Label = "First Test Message";
            myNewPublicQueue.Send(mm);
        }
    }
    private void buttonGet_Click(object sender, EventArgs e)
    {
        myNewPublicQueue.ReceiveCompleted += new          ReceiveCompletedEventHandler(queue_ReceiveCompleted);
        // Start listening.
        myNewPublicQueue.BeginReceive();
    }
    private void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
    {

        lock (lockObject)
        {
            // The message is plain text.
            string text = (string)e.Message.Body;
            Console.WriteLine("Message received: " + text);
            textBoxGet.Text = text;
        }
        // Listen for the next message.
        myNewPublicQueue.BeginReceive();
    }
    public enum MessageType
    {
        MESSAGE_TYPE_PLAIN_TEXT = 0,
        MESSAGE_TYPE_HELLO_WORLD = 1
    };
    private void Form1_Load(object sender, EventArgs e)
    {
    }


    }
}

如何创建c#程序发送到本地消息队列

调用MessageQueue.Send()方法时,检查消息队列中的Outgoing Queues文件夹。您应该看到已经设置了一个临时队列(注意,只有当目标队列位于发送机器的另一台机器上时才会出现这种情况)。检查该队列,您应该会在其中看到您的消息。这意味着您在代码中错误地处理了队列。

试试这个:创建一个私有队列,并使用FORMATNAME:DIRECT=OS:<server name>'PRIVATE$'<queue name>格式给它寻址。从你的问题听起来你真的不需要使用公共队列。

另外,不要检查队列是否存在,除非您打算在队列不存在时进行处理(例如通过引发异常或以编程方式创建异常)。