当我试图发送到队列时,我一直收到一个错误。
指定的格式名称不支持所请求的操作。例如,不能删除直接队列格式名称。
我的队列名存储在一个配置文件中,如下所示
"FormatName:Direct=OS:MyComputerName\PRIVATE$\MyQueue“
有两个队列存在,每个队列都有权限集,以便每个人都有完全控制。
SyncUser你可以假设=“每个人”或"My_Domain\operator“
//init the queues
qSync = new MessageQueue(queueName + "-sync")
{Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};
qClient = new MessageQueue(queueName + "-client")
{Formatter = new XmlMessageFormatter(new Type[] { typeof(String) })};创建队列不会导致任何错误,但是当我调用这个发送函数时会收到错误
**Send(qSync, "This is a message");** //Example
public void Send(MessageQueue queue, string msg)
{
try
{
queue.Send(msg);
}
catch (MessageQueueException mqx)
{
var e = string.Format("Failed to Send - {0} | {1}", queue.QueueName, mqx.Message);
OnSynchronizerMonitor(new SyncEvent(e));
}
}任何帮助都将不胜感激。
编辑
我的消息似乎是将其发送到远程队列目的地,但应用程序仍然会在发送的每条消息上抛出该错误。如果我在调试时查看MessageQueues (qSync\qClient),那么在使用它之前,这个错误就会出现在几个内部字段中。
发布于 2013-02-12 21:21:38
我希望有人能为我确认这一点,因为我似乎找不到任何论坛问题或文件支持这一点,但似乎MessageQueue有一个问题,我的事件设置。
我删除了事件调用,简单地硬编码了队列创建,并在我的主进程中发送了它的位置,一切都很好。
我的设置是这样的:
服务--创建处理器、同步器并设置事件。
处理器启动一个线程,其中它处理字符串事务,在成功的进程中,事务需要通过同步器发送,因此处理器触发事件。
同步器已经创建了队列,只是在等待事件被触发以发送消息。
如果有人能弄清楚这是否是一个跨线程的问题,或者只是我的系统中的一个怪癖,我们将不胜感激。
**经过更多的研究和一些尝试和错误,似乎我得到了错误,因为交叉线程复杂的事件。我的猜测是,这是一个类似的问题,因为UI对象是从不同的线程更新的,而不是在这个线程上创建的。这个错误本质上是一个所有权问题。但是消息仍然在传递,但是队列抱怨它的原始所有者不是发起调用的那个人。
https://stackoverflow.com/questions/14820630
复制相似问题