【发布时间】:2010-03-31 17:32:43
【问题描述】:
我正在开发一种解决方案,该解决方案将利用 msmq 在两台机器之间传输数据。由于这些机器是分开的,我们需要使用 HTTP 传输消息。
在我的测试环境中,我使用的是 Windows 7 x64 开发机器,它尝试使用自制应用程序将消息发送到我可以控制的几台测试机器中的任何一台。
所有机器都是安装了 msmq 和 msmq http 支持的 windows server 2003 或 server 2008。
对于任何测试目标,我都可以成功使用以下队列路径名:
FORMATNAME:DIRECT=TCP:[machine_name_or_ip]\private$\test_queue
但是对于任何测试目的地,以下总是失败
FORMATNAME:DIRECT=$/test_queue
我已经使用了所有可用的机器名称/ips 排列。我使用this blog post 中描述的方法创建了映射。所有结果都是相同的 HTTP 错误:400。
以下是用于发送消息的代码:
MessageQueue mq = new MessageQueue(queuepath);
System.Messaging.Message msg = new System.Messaging.Message
{
Priority = MessagePriority.Normal,
Formatter = new XmlMessageFormatter(),
Label = "test"
};
msg.Body = txtMessageBody.Text;
msg.UseDeadLetterQueue = true;
msg.UseJournalQueue = true;
msg.AcknowledgeType = AcknowledgeTypes.FullReachQueue | AcknowledgeTypes.FullReceive;
msg.AdministrationQueue = new MessageQueue(@".\private$\Ack");
if (SendTransactional)
mq.Send(msg, MessageQueueTransactionType.Single);
else
mq.Send(msg);
附加信息:在目标机器上的 IIS 日志中,我可以看到我发送的每条消息都被记录为状态码为 200 的 POST。
我愿意接受任何建议。
【问题讨论】:
-
我遇到了完全相同的问题。你解决过这个问题吗?
-
对不起,我没有。在我真正需要实施任何解决方案之前,该项目就被取消了。但是,似乎有人在下面提供了一个未经测试(由我)但看似可信的答案。