1

当我尝试发送到队列时,我不断收到错误消息

指定的格式名称不支持请求的操作。例如,不能删除直接队列格式名称。

我的队列名称存储在配置文件中,如下所示

“格式名称:直接=操作系统:我的计算机名称\PRIVATE$\MyQueue”

存在 2 个队列,每个队列都设置了权限,以便每个人都拥有完全控制权。

您可以假设 SyncUser = "EVERYONE" 或 "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),该错误甚至在使用之前就出现在几个内部字段中。

4

1 回答 1

0

我希望有人可以为我确认这一点,因为我似乎找不到任何支持这一点的论坛问题或文档,但似乎 MessageQueue 与我的事件设置存在问题。

我删除了事件调用并简单地硬编码了队列创建并在我的主进程中发送到它的位置,一切正常。

我的设置是这样的:

服务 - 创建处理器、同步器并设置事件。

处理器启动一个线程,在该线程中处理字符串事务,在成功的过程中,事务需要通过同步器发送,因此处理器触发事件​​。

Synchronizer 已经创建了队列,只是等待触发事件以发送消息。

如果有人可以阐明这可能是跨线程问题还是只是我系统中的怪癖,将不胜感激。

* *经过更多研究和一些试验和错误,似乎由于事件的跨线程复杂性而导致错误。我的猜测是,从与创建它的线程不同的线程更新 UI 对象是一个类似的问题。该错误本质上是所有权问题。虽然消息仍然存在,但队列抱怨它的原始所有者不是发起呼叫的人。

于 2013-02-12T21:21:38.267 回答