当我尝试发送到队列时,我一直收到错误
指定的格式名称不支持请求的操作。例如,无法删除直接队列格式名称。
我的队列名称存储在配置文件中,看起来像这样
" FORMATNAME:直接= OS:MyComputerName \ PRIVATE $ \ myQueue中"
存在2个队列,每个队列都设置了权限,以便每个人都具有完全控制权。
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),那么在使用它之前,该错误会显示在几个内部字段中。
答案 0 :(得分:0)
我希望有人可以为我确认这一点,因为我似乎无法找到支持此问题的任何论坛问题或文档,但似乎MessageQueue在我的事件设置中存在问题。
我删除了事件调用,只是硬编码队列创建并在我的主进程中发送到位,一切正常。
我的设置是这样的:
服务 - 创建处理器,同步器并设置事件。
处理器启动线程,在其中处理字符串事务,在成功的进程中,事务需要通过Synchronizer发送,因此处理器触发事件。
Synchronizer已经创建了队列,只是等待触发事件来发送消息。
如果有人能说明这可能是一个跨线程问题,或者只是我系统中的怪癖,我们将不胜感激。
* *经过一些研究和一些试验和错误之后,似乎我因为事件的交叉线程复杂化而得到错误。我的猜测是,从与其创建的线程不同的线程更新UI对象是一个类似的问题。该错误本质上是一个所有权问题。消息仍然存在,但队列抱怨其原始所有者不是发起呼叫的人。