【发布时间】:2013-02-13 07:09:40
【问题描述】:
当我尝试发送到队列时,我一直收到错误消息
指定的格式名称不支持请求的操作。例如,不能删除直接队列格式名称。
我的队列名称存储在配置文件中,如下所示
"FormatName:Direct=OS:MyComputerName\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));
}
}
任何帮助将不胜感激。
编辑
似乎我的消息 ARE 到达了他们的远程队列目的地,但应用程序仍然在发送的每条消息上抛出该错误。如果我在调试时查看 MessageQueues (qSync|qClient),则该错误会在几个内部字段中出现,甚至在使用之前。
【问题讨论】:
-
您是否要发送到远程计算机?如果一切都在本地机器上运行,一切正常吗?你的队列也是事务性的吗?
-
是的,它是一台远程机器,Slave 将在本地运行,它似乎运行良好,但它所做的一切都是从队列中读取的,所以目前它还没有经过很好的测试。它是一个非事务队列
-
您正在调用 Queue.Send() 但您没有显示 Queue 是如何设置的。
-
抱歉,代码已更新。 “队列”是传递给函数的任何队列。我这样做是因为我有多个使用相同发送逻辑的队列。
-
您确定可以从远程计算机访问 PRIVATE 队列吗?我会说这行不通。