C# 无法为日志队列构造MessageQueue对象

C# 无法为日志队列构造MessageQueue对象,c#,windows,message-queue,C#,Windows,Message Queue,我无法构造一个对象来访问我的一个应用程序使用的目标日志队列 当我执行 MessageQueue journalQ=newmessagequeue(“我的计算机\\private$\\test queue”) 我可以构造一个messagequeue 我已经验证了测试队列存在,并且它有一个启用的日志队列,并且有一条消息 当我执行 MessageQueue journalQ=newmessagequeue(“我的计算机\\private$\\test queue\\Journal$”) 我无法构造

我无法构造一个对象来访问我的一个应用程序使用的目标日志队列

当我执行

MessageQueue journalQ=newmessagequeue(“我的计算机\\private$\\test queue”)
我可以构造一个messagequeue

我已经验证了测试队列存在,并且它有一个启用的日志队列,并且有一条消息

当我执行

MessageQueue journalQ=newmessagequeue(“我的计算机\\private$\\test queue\\Journal$”)
我无法构造队列,当查看我的局部变量时,我会抛出
MessageQueueException
异常,表示指定的格式名称不支持请求的操作。例如,无法删除直接队列格式名称。

我尝试了多种不同的路径fomrat组合,包括完整的“Format=OS”和更多的解析字符串,以及“journal”而不是“\journal”


您不能直接向日志队列发送消息,只能从这些队列接收消息。访问日志的
MessageQueue
对象的发送相关成员将抛出您在问题中引用的异常。以下面的示例代码为例:

static void Main(字符串[]args)
{
//创建队列
string queueName=“computer\u name\\private$\\test queue”;
MessageQueue.Create(queueName);
//创建MessageQueue对象并启用日志
MessageQueue=newmessagequeue(queueName);
queue.Formatter=newXMLMessageFormatter(新类型[]{typeof(string)});
queue.UseJournalQueue=true;
WriteLine($“queue.CanRead={queue.CanRead}”);
Console.WriteLine($“queue.CanWrite={queue.CanWrite}”);
//发送消息
queue.Send(“测试消息”);
//从队列接收消息
//消息现在被复制到日志中
Console.WriteLine($”queue.Receive():{(string)queue.Receive().Body}”);
//再次从日志接收消息
MessageQueue journal=newmessagequeue(queueName+“\\journal$”;
journal.Formatter=newXMLMessageFormatter(新类型[]{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

这非常有用,vielen vielen Dank Jan,我不是在构建队列,而是在现有队列的基础上工作。您帮助我确定异常不会阻止构造对象上的Pop()和Peek()操作,以下代码起作用:
c#journalQ=newmessagequeue(“my_computer\\private$\\test queue\\Journal$”;journalQ.MessageReadPropertyFilter.SetAll();journalQ.Formatter=newXMLMessageFormatter(新字符串[]{“System.string,mscorlib”});WriteLine($“journal.Peek():{(string)journalQ.Peek(TimeSpan.FromSeconds(15)).Body.ToString()}”)我很高兴它帮助了你:)我刚刚看到你又一次不接受这个答案-有什么遗漏吗?
queue.CanRead = True
queue.CanWrite = True
queue.Receive(): test message
journal.CanRead = True
journal.CanWrite = False
journal.Receive(): test message