C# MSMQ专用队列-未接收
MSMQ的新功能。。。我的本地队列从未收到我的测试消息。我已验证消息队列和消息队列触发器是否正在我的服务对话框(Vista Ultimate)中运行。想法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
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()使用相同的对象。巨大的错误。它会导致堆栈溢出异常,请记住这一点