我有一个使用 MSMQ 通信的 WCF 服务,当我在本地网络上运行服务时,我在客户端配置文件中配置服务端点以指向主机,例如,如果服务主机上指定的端点是:
<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
我将客户端配置为向此端点发送消息:
<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
显然 192.168.1.5 是主机的 IP,这就像一个魅力。我在 IIS 7 中托管我的服务,我在 IIS 上激活 MSMQ 侦听器,提供适当的访问权限等(Tom Hollanders 文章中的几乎所有内容),我什至可以在浏览器中通过 http 访问我的服务,但是当我创建我的客户端时托管在 IIS 中并在客户端配置端点的服务App.config
,自然我将我的客户端配置为:
<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
这就是事情出错的地方。我发送的消息一直在客户端计算机上的传出队列中排队:DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqService
并且队列的状态始终为:“等待连接”。我已尝试将队列传输协议设置为SRMP
,我的队列名称与 IIS 要求的服务名称相同,并且我已授予队列适当的权限。有没有人最近遇到过这个问题?有任何想法吗?如果有人可以通过 HTTP 共享 MSMQ 的工作示例(如果他们有的话),那就太好了。
任何帮助将不胜感激。提前致谢。