C# MSMQ专用队列-未接收

C# MSMQ专用队列-未接收,c#,msmq,console-application,C#,Msmq,Console Application,MSMQ的新功能。。。我的本地队列从未收到我的测试消息。我已验证消息队列和消息队列触发器是否正在我的服务对话框(Vista Ultimate)中运行。想法 class ConsoleApplication { private const string Path = @".\private$\SomeQueue"; static void Main(string[] args) { var queue = !MessageQueue.Exists(Path

MSMQ的新功能。。。我的本地队列从未收到我的测试消息。我已验证消息队列和消息队列触发器是否正在我的服务对话框(Vista Ultimate)中运行。想法

class ConsoleApplication
{
    private const string Path = @".\private$\SomeQueue";

    static void Main(string[] args)
    {
        var queue = !MessageQueue.Exists(Path) 
         ? MessageQueue.Create(Path) 
         : new MessageQueue(Path) { Formatter = new BinaryMessageFormatter() };

        queue.ReceiveCompleted += queue_ReceiveCompleted;
        queue.BeginReceive();
        queue.Send("test message");
        Console.ReadLine();
        queue.Close();
    }

    static void queue_ReceiveCompleted(object sender, 
                                        ReceiveCompletedEventArgs e)
    {
        Console.WriteLine("Received message...");
        var queue = (MessageQueue)sender;
        try
        {
            var message = queue.EndReceive(e.AsyncResult);
            Console.WriteLine("Processing message...");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            queue.BeginReceive();
        }
    }
}

编辑:刚想好,试着用MessageQueue.Delete(路径)删除并重新创建队列。它成功了。我猜我的队列不知怎么被冲了。

我怀疑队列本身被冲破了。 更可能是创建队列和访问队列之间的时间问题。
在专用队列可用之前,MSMQ必须执行各种操作,例如在LQS目录中创建配置文件

我怀疑队列本身是否中断了。 更可能是创建队列和访问队列之间的时间问题。
在专用队列可用之前,MSMQ必须执行各种操作,例如在LQS目录中创建配置文件

您不能同时访问控制台。尝试执行thread.Sleep()并在回调中设置布尔值。然后,您可以在布尔值设置为读取输出后执行读取行

while (!received)
{
    System.Threading.Thread.Sleep(1000);
}
Console.ReadLine();

也许您需要使用断点和debug.WriteLine()来读取写入visual studio输出窗口的输出。

您不能同时访问控制台。尝试执行thread.Sleep()并在回调中设置布尔值。然后,您可以在布尔值设置为读取输出后执行读取行

while (!received)
{
    System.Threading.Thread.Sleep(1000);
}
Console.ReadLine();
也许您需要使用断点和debug.WriteLine()来读取写入visual studio输出窗口的输出。

尝试添加

queue.ReceiveCompleted += queue_ReceiveCompleted;
静态无效队列的最后一个块中\u ReceiveCompleted(对象发送方,ReceiveCompletedEventArgs e)
事件。

尝试添加

queue.ReceiveCompleted += queue_ReceiveCompleted;

静态无效队列的最后一个块中\u ReceiveCompleted(对象发送方,ReceiveCompletedEventArgs e)
事件。

获取发送方对象队列var queue=(MessageQueue)发送方的新对象引用;然后对new BeginReceive()使用相同的对象。巨大的错误。它给出了堆栈溢出异常。请记住这一点。获取对发送方对象队列var queue=(MessageQueue)发送方的新对象引用;然后对new BeginReceive()使用相同的对象。巨大的错误。它会导致堆栈溢出异常,请记住这一点