我看过一些与此相关的帖子,但我没有找到我的问题的答案
所以我有一个客户端使用 WCF netmsmq 绑定向 MSMQ 发送消息。这工作正常。
我在我的本地 IIS7 (Windows 7) 中托管了一个网站,公开了一个 WCF MSMQ 端点。
当我从客户端发布消息时,消息没有被使用,它们只是永远留在队列中直到,我手动浏览服务,然后将消息发送到托管在 IIS 中的服务
那么,我需要做什么才能让托管在 IIS 中的 WCF 服务自动使用这些消息?
注意:我刚刚注意到,在 IIS 中调用托管在我的 Web 应用程序中的任何 WCF 服务后,会唤醒服务或其他东西,突然队列消息被消耗...
客户端配置
<system.serviceModel>
<client>
<endpoint name="Service.ServiceContracts.QueueLoggingService NET MSMQ"
address="net.msmq://localhost/private/Service.WebHost/QueueLoggingService.svc"
binding="netMsmqBinding"
contract="Service.ServiceContracts.IQueueLoggingService">
</endpoint>
</client>
<bindings>
<netMsmqBinding>
<binding exactlyOnce="true" durable="true" maxRetryCycles="15" receiveRetryCount="15">
<security mode="None">
<message clientCredentialType="None" />
<transport msmqAuthenticationMode="None" />
</security>
</binding>
</netMsmqBinding>
</bindings>
</system.serviceModel>
服务器配置
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
<services>
<service name="Service.ServiceImplementations.QueueLoggingService">
<endpoint
address="net.msmq://localhost/private/Service.WebHost/QueueLoggingService.svc"
binding="netMsmqBinding"
contract="Service.ServiceContracts.IQueueLoggingService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<netMsmqBinding>
<binding exactlyOnce="true" durable="true" maxRetryCycles="15" receiveRetryCount="15">
<security mode="None">
<message clientCredentialType="None" />
<transport msmqAuthenticationMode="None" />
</security>
</binding>
</netMsmqBinding>
</bindings>
</system.serviceModel>
我尝试过的事情:
- 消息队列服务运行
- 消息队列触发器服务正在运行
- Net.Msmq 侦听器适配器服务正在运行
- Net.Pipe Listener Adapter 服务正在运行
- Net.Tcp Listener Adapter 服务正在运行
- Net.Tcp 端口共享服务服务运行
- 分布式事务协调器服务运行
- 已安装 MSMQ Active Directory 域服务集成
- 已安装 MSMQ HTTP 支持
- 已安装 MSMQ 触发器
- 已安装 MSMQ 多播支持
- 已安装 WCF 非 HTTP 激活
- 已安装 WCF HTTP 激活
- AppPool 配置为自动启动
我的默认网站包含以下配置:
<application path="/Service.WebHost" applicationPool="MyGenericAppPool" enabledProtocols="net.msmq, http"> <virtualDirectory path="/" physicalPath="C:\Some Path\Service.WebHost" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:" /> <binding protocol="net.tcp" bindingInformation="808:*" /> <binding protocol="net.pipe" bindingInformation="*" /> <binding protocol="net.msmq" bindingInformation="localhost" /> <binding protocol="msmq.formatname" bindingInformation="localhost" /> </bindings>