繁体   English   中英

无法在工作组模式下使用WCF从远程事务专用队列中读取(可以使用System.Messaging!)

[英]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

有几种不同的方式可以连接到队列,当您是远程或本地时,它也会发生变化。

我过去发现这篇文章有助于:

http://blogs.msdn.com/b/johnbreakwell/archive/2009/02/26/difference-between-path-name-and-format-name-when-accessing-msmq-queues.aspx

此外,MSDN上的MessageQueue构造函数... http://msdn.microsoft.com/en-us/library/ch1d814t.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM