设置
我有一个托管在 Windows Server 2012R2 的 IIS/AppFabric 上运行的 WCF 服务。 该服务通过 netMsmqBinding 绑定到本地事务性 MSMQ 队列。我的操作使用 TransactionScopeRequired = true 进行装饰。 该服务操作接收来自 BizTalk 服务器的调用,处理它们并通过 netMsmqBinding 将响应发送回远程队列(位于同一 BizTalk 服务器上)。
<endpoint name="Outbound" address="net.msmq://int01test.mydomain.com/private/queue.name" binding="netMsmqBinding" bindingConfiguration="QueueBindingConfigurationOutbound" contract="My.Outbound.Contract" />
<netMsmqBinding>
<binding name="QueueBindingConfigurationOutbound">
<security>
<transport msmqAuthenticationMode="WindowsDomain" msmqProtectionLevel="Sign" />
</security>
</binding>
</netMsmqBinding>
在测试环境中,这个方案可以正常工作。测试环境的物理设置如下: Server int01test.mydomain.com 托管一个 BizTalk 服务器和我的入站队列。 这在服务帐户 mydomain\inttestuser 下运行。 Server app01test.mydomain.com 托管我的应用程序(IIS/AppFabric)、我的数据库(SQL server)和我的出站队列。 这在服务帐户 mydomain\apptestuser 下运行。
问题: 当此解决方案升级到接受测试环境时,调用仍然被处理,但响应被阻止,并显示错误消息:
System.ServiceModel.EndpointNotFoundException: An error occurred while opening the queue:Unrecognized error -1072824317 (0xc00e0003). The message cannot be sent or received from the queue. Ensure that MSMQ is installed and running. Also ensure that the queue is available to open with the required access mode and authorization. ---> System.ServiceModel.MsmqException: An error occurred while opening the queue:Unrecognized error -1072824317 (0xc00e0003). The message cannot be sent or received from the queue. Ensure that MSMQ is installed and running. Also ensure that the queue is available to open with the required access mode and authorization.
区别: 在测试环境中,我的服务和数据库运行在单个服务器实例上。(BizTalk Server 及其队列是在另一台服务器上) 在接受测试环境中,我的解决方案部署在两个负载均衡服务器上,数据库在一个单独的集群中。 还有更严格的外部防火墙规则以模仿生产环境。 即使 BizTalk 服务器已经被集群化,我们现在是机器对机器通信,而不是集群对集群通信。
因此,在 QA 环境中的设置如下: Server int01qa.mydomain.com(与 int02qa.mydomain.com 集群)托管 BizTalk 服务器和我的入站队列。 这在服务帐户 mydomain\intqauser 下运行。 Server app01qa.mydomain.com(与 app02qa.mydomain.com 集群)托管我的应用程序(IIS/AppFabric)和我的出站队列。 这在服务帐户 mydomain\appqauser 下运行。 Server db01qa.mydomain.com 托管我的数据库。
我们已经尝试过的方法: - 我们已禁用远程队列的身份验证。 - 我们已授予运行我的服务的帐户以及“everyone”完全控制权。 - 我们已成功地在两台服务器之间手动发送 MSMQ 消息。 - 我已将我的服务配置为将响应发送到本地私有队列,但仍然出现相同的错误。