无法使MSMQ正常工作

时间:2013-02-11 20:51:53

标签: c# .net msmq

当我尝试发送到队列时,我一直收到错误

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

我的队列名称存储在配置文件中,看起来像这样

" 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),那么在使用它之前,该错误会显示在几个内部字段中。

1 个答案:

答案 0 :(得分:0)

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

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

我的设置是这样的:

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

处理器启动线程,在其中处理字符串事务,在成功的进程中,事务需要通过Synchronizer发送,因此处理器触发事件​​。

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

如果有人能说明这可能是一个跨线程问题,或者只是我系统中的怪癖,我们将不胜感激。

* *经过一些研究和一些试验和错误之后,似乎我因为事件的交叉线程复杂化而得到错误。我的猜测是,从与其创建的线程不同的线程更新UI对象是一个类似的问题。该错误本质上是一个所有权问题。消息仍然存在,但队列抱怨其原始所有者不是发起呼叫的人。