我花了几天时间阅读有关此问题的MSDN,论坛和文章,但无法找到解决问题的方法。
作为PoC,我需要从多台机器中使用队列,因为我需要在消费者方面容错。性能不是问题,因为每天不到100条消息应该通过交换。
我编写了两个简单的控制台应用程序,一个作为客户端,另一个作为服务器。使用Framework 4.0(也在3.5上测试)。消息正在使用事务。
即使在运行多个消费者应用程序实例时,所有内容都会在一台计算机(Windows 7)上运行罚款。
现在,我在同一个域中运行了2012和2008 R2虚拟测试服务器(但不想使用AD集成)。我使用的是IP地址或“。”在端点地址属性中,以防止DNS / AD解决方案的副作用。
如果队列由消费者托管并且生产者正在远程专用队列上提交消息,那么一切正常。如果我交换2012和2008服务器的消费者/生产者角色,也是如此。
但是,当消费者从远程队列中读取并且生产者正在提交消息时,我从未能够使用WCF进行此次运行。 Submition永远不会失败,我的问题出在消费者一方。
我的愿望是使用netMsmqBinding运行,但我也尝试使用msmqIntegrationBinding。对于每个测试,我都修改了代码和配置,然后确认当消费者从本地队列消耗时它运行正常。
我做的最后一个测试是仅在生产者(本地队列)上使用WCF(msmqIntegrationBinding),在使用者(远程队列)上使用System.Messaging.MessageQueue:它工作正常! =>我的目标是在两侧使用WCF和netMsmqBinding进行相同的操作。
在我看来,我已经证明这个问题是WCF问题,而不是MSMQ问题。这与安全性,身份验证,防火墙,传输,协议,MSMQ版本等无关。
使用MS Service Trace Viewer的错误信息:
接收消息时使用msmqIntegrationBinding(打开队列正常):从队列接收消息时发生错误:无法导入指定的事务。 (-1072824242,0xc00e004e)。确保已安装并运行MSMQ。确保队列可用于接收。
在打开队列时使用netMsmqBinding:将“172.22.1.9 \ private $ \ Test”队列路径名转换为格式名时发生错误:指定的队列路径名无效。 (-1072824300,0xc00e0014)。排队通道上的所有操作都失败了。确保队列地址有效。必须在启用Active Directory集成的情况下安装MSMQ,并且可以访问它。
如果有人可以帮助找到为什么我的配置无法由WCF处理,这是一种比Messaging更优雅和可配置的方式,我将不胜感激!
Thank you.
答案 0 :(得分:0)
您可能需要发布消费者代码和配置以提供更多想法,但它可能是队列名称的构造 - 例如。
FORMATNAME:DIRECT = TCP:192.168.0.2 \ SomeQueue
连接到队列有几种不同的方法,当你是远程或本地时,它会发生变化。
我过去发现这篇文章有所帮助:
此外,MSDN上的MessageQueue构造函数... http://msdn.microsoft.com/en-us/library/ch1d814t.aspx