作业服务器:Windows Server 2008 R2 .NET 版本:4.5
我正在使用 WCF 连接两台服务器 - app和queue。我希望应用程序能够从queue发送/接收消息。由于某种原因,应用程序可以发送消息,但不能接收它们。
netMsmq 绑定如下所示:
<binding name="JobExecutionerBinding" receiveErrorHandling="Move">
<security>
<transport msmqAuthenticationMode="None" msmqProtectionLevel="None" />
</security>
</binding>
服务绑定看起来像:
现在,客户端绑定如下所示:
<endpoint address="net.msmq://queue/private/jobs"
binding="netMsmqBinding"
bindingConfiguration="JobExecutionerBinding"
contract="JobExecution.Common.IJobExecutionService"
name="SimpleEmailService"
kind=""
endpointConfiguration=""/>
为了安全起见,我改了几个名字。
因此,WC 客户端可以毫无问题地发送到远程队列。它甚至可以正确地对传出消息进行排队,并在远程队列服务器关闭的情况下稍后将其转发。但是每次我启动 WCF 服务时,我都会得到这个:
打开队列时出错。确保 MSMQ 已安装并正在运行,队列存在并且具有适当的读取权限。内部异常可能包含附加信息。---> System.ServiceModel.MsmqException:打开队列时出错:队列不存在或您没有足够的权限执行该操作。(-1072824317, 0xc00e0003)。无法从队列发送或接收消息。确保 MSMQ 已安装并正在运行。还要确保可以使用所需的访问模式和授权打开队列。在 System.ServiceModel.Channels.MsmqQueue.OpenQueue() 在 System.ServiceModel.Channels.MsmqQueue.GetHandle() 在 System.ServiceModel.Channels.MsmqQueue.SupportsAccessMode(String formatName, Int32 accessType, MsmqException&
我已经在 StackOverflow 和互联网上待了 8 个小时。这是我所做的:
- 确保匿名登录,每个人,网络,网络服务和本地服务都有完全控制权
- 停止远程 MSMQ 服务器并观察 WCF 服务的作用,我得到一个不同的错误 - 所以我确定启动时 WCF 服务正在与 MSMQ 服务器通话
- 在两个盒子上禁用 Windows 防火墙并通过 EC2 安全组打开所有端口
- 在注册表中将 AllowNauthenticatedRpc 和 NewRemoteReadServerAllowNoneSecurityClient 设置为 1
- 在两台服务器上配置了 MS DTC(队列是事务性的,但无论队列是否是事务性的,我都会收到相同的错误)
- 确认如果我使用本地队列,WCF 服务器启动正常,并且接收没有问题
帮助!!!如果没有远程排队解决方案,我无法扩展我的应用程序。