我们有一个日志记录服务,它通过推送到MSMQ队列,然后是一个从该队列中拉出来进入数据库的持久性服务来工作。两种服务都是WCF。最近,尽管日志服务仍然没有问题,但持久性服务已停止工作,并且在尝试打开时会抛出以下错误:
打开队列时发生错误:通用错误代码。 (-1072824319,0xc00e0001)。无法从队列中发送或接收消息。确保已安装并运行MSMQ。还要确保可以使用所需的访问模式和授权打开队列。
显然,这个错误不太有用。我已经尝试切换持久性服务以使用与日志服务相同的应用程序池,为服务创建新的应用程序,重新启动MSMQ,并重新启动服务器 - 但没有骰子。我没有想法,所以任何建议都会非常感激。
服务绑定
这是对服务的约束:
<msmqIntegrationBinding>
<binding exactlyOnce="true" durable="true" serializationFormat="Xml" maxReceivedMessageSize="2147483647" closeTimeout="00:00:30" sendTimeout="00:00:30" receiveTimeout="00:00:30" timeToLive="24:00:00" receiveRetryCount="1" maxRetryCycles="1" retryCycleDelay="00:10:00" receiveErrorHandling="Move">
<security mode="Transport"/>
</binding>
</msmqIntegrationBinding>
自从许多月前部署以来,它没有发生变化,但看起来这项服务已经有一个多月没有运行了。
编辑:好吧,在所有服务器上重新安装MSMQ似乎没有帮助(事实上,似乎只是搞乱了我的队列访问权限)。 Groovy的。
EDIT2 :即使我切换到netMsmqBinding
代替msmqIntegrationBinding
,我也会遇到同样的错误。
EDIT3:如果我在服务器本地创建队列而不是在另一台服务器上创建队列,那么它可以正常工作。因此,关于转到其他服务器的问题就是问题。重新启动DTC无法解决。
EDIT4:我可以在另一台服务器上使用队列,而不是MSMQ服务器。所以它必须是与MSMQ服务器(或MSMQ服务器本身)连接的东西。
EDIT5:端口1801,135,2103和2105都在服务服务器和队列服务器之间打开。
EDIT6: DTCPing取得了成功。