[英]Can't read from remote transactional private queue using WCF in workgroup mode (can do using System.Messaging !)
我花了几天时间阅读有关此问题的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.
您可能需要发布消费者代码和配置以提供更多想法,但它可能是队列名称的构造 - 例如
FORMATNAME:DIRECT = TCP:192.168.0.2 \\ SomeQueue
有几种不同的方式可以连接到队列,当您是远程或本地时,它也会发生变化。
我过去发现这篇文章有助于:
此外,MSDN上的MessageQueue构造函数... http://msdn.microsoft.com/en-us/library/ch1d814t.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.