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(Path)删除并重新创建队列。它奏效了。我想我的队列不知何故被淹没了。
答案 0 :(得分:2)
尝试添加
queue.ReceiveCompleted += queue_ReceiveCompleted;
在static void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
事件的最后一个块中。
答案 1 :(得分:1)
我怀疑队列本身是否已被破坏。 更有可能是创建队列和访问队列之间的时间问题。 MSMQ必须执行各种操作,例如在专用队列可用之前在LQS目录中创建配置文件。
答案 2 :(得分:0)
您无法同时访问控制台。尝试执行thread.Sleep()并在回调中设置一个布尔值。然后,在布尔值设置为读取输出后,您可以执行readline。
while (!received)
{
System.Threading.Thread.Sleep(1000);
}
Console.ReadLine();
也许你可能想要使用断点和debug.WriteLine()来读取写入visual studio输出窗口的输出。