无法为日志队列构造 MessageQueue 对象
Cannot construct MessageQueue object for journal queue
我无法构建 MessageQueue 对象来访问我的应用程序之一使用的目标日志队列。
当我执行
MessageQueue journalQ = new MessageQueue("my_computer\private$\test queue")
我可以构造一个消息队列。
我已验证测试队列存在并且它有一个启用的日志队列并有一条消息。
当我执行
MessageQueue journalQ = new MessageQueue("my_computer\private$\test queue\Journal$")
我无法构建队列,当查看我的本地人时,我得到 MessageQueueException
异常抛出说 The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted.
我尝试了多种不同的路径格式组合,包括完整的 "Format=OS" 和更多剖析的字符串,以及“;journal”而不是“\journal”
string journalPath = (messageQueueList[choiceInt].Path.Split(':')[2].Split('$')[0]
+ "$"
+ messageQueueList[choiceInt].Path.Split('$')[1]
+ "\Journal$"
);
journalQ = new MessageQueue(journalPath);
您不能直接将消息发送到日志队列,您只能从那些接收消息。访问期刊 MessageQueue
对象的发送相关成员将引发您在问题中引用的异常。拿下面的例子代码:
static void Main(string[] args)
{
// Create queue
string queueName = "computer_name\private$\test queue";
MessageQueue.Create(queueName);
// Create MessageQueue object and enable journal
MessageQueue queue = new MessageQueue(queueName);
queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
queue.UseJournalQueue = true;
Console.WriteLine($"queue.CanRead = {queue.CanRead}");
Console.WriteLine($"queue.CanWrite = {queue.CanWrite}");
// Send message
queue.Send("test message");
// Receive message from queue
// The message is copied to the journal now
Console.WriteLine($"queue.Receive(): {(string)queue.Receive().Body}");
// Receive message again from journal
MessageQueue journal = new MessageQueue(queueName + "\Journal$");
journal.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
Console.WriteLine($"journal.CanRead = {journal.CanRead}");
Console.WriteLine($"journal.CanWrite = {journal.CanWrite}");
Console.WriteLine($"journal.Receive(): {(string)journal.Receive().Body}");
}
这将创建一个新的消息队列并启用匹配的日志队列。发送的消息存储在消息队列中;收到后,将其移至日志队列。然后您可以再次从日志队列中收到此消息。
程序的输出是:
queue.CanRead = True
queue.CanWrite = True
queue.Receive(): test message
journal.CanRead = True
journal.CanWrite = False
journal.Receive(): test message
我无法构建 MessageQueue 对象来访问我的应用程序之一使用的目标日志队列。
当我执行
MessageQueue journalQ = new MessageQueue("my_computer\private$\test queue")
我可以构造一个消息队列。
我已验证测试队列存在并且它有一个启用的日志队列并有一条消息。
当我执行
MessageQueue journalQ = new MessageQueue("my_computer\private$\test queue\Journal$")
我无法构建队列,当查看我的本地人时,我得到 MessageQueueException
异常抛出说 The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted.
我尝试了多种不同的路径格式组合,包括完整的 "Format=OS" 和更多剖析的字符串,以及“;journal”而不是“\journal”
string journalPath = (messageQueueList[choiceInt].Path.Split(':')[2].Split('$')[0]
+ "$"
+ messageQueueList[choiceInt].Path.Split('$')[1]
+ "\Journal$"
);
journalQ = new MessageQueue(journalPath);
您不能直接将消息发送到日志队列,您只能从那些接收消息。访问期刊 MessageQueue
对象的发送相关成员将引发您在问题中引用的异常。拿下面的例子代码:
static void Main(string[] args)
{
// Create queue
string queueName = "computer_name\private$\test queue";
MessageQueue.Create(queueName);
// Create MessageQueue object and enable journal
MessageQueue queue = new MessageQueue(queueName);
queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
queue.UseJournalQueue = true;
Console.WriteLine($"queue.CanRead = {queue.CanRead}");
Console.WriteLine($"queue.CanWrite = {queue.CanWrite}");
// Send message
queue.Send("test message");
// Receive message from queue
// The message is copied to the journal now
Console.WriteLine($"queue.Receive(): {(string)queue.Receive().Body}");
// Receive message again from journal
MessageQueue journal = new MessageQueue(queueName + "\Journal$");
journal.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
Console.WriteLine($"journal.CanRead = {journal.CanRead}");
Console.WriteLine($"journal.CanWrite = {journal.CanWrite}");
Console.WriteLine($"journal.Receive(): {(string)journal.Receive().Body}");
}
这将创建一个新的消息队列并启用匹配的日志队列。发送的消息存储在消息队列中;收到后,将其移至日志队列。然后您可以再次从日志队列中收到此消息。
程序的输出是:
queue.CanRead = True
queue.CanWrite = True
queue.Receive(): test message
journal.CanRead = True
journal.CanWrite = False
journal.Receive(): test message