VS 2012/.NET4.5,Windows 8的/ IIS8和64位WCF激活了MSMQ其中服務(.SVC)是根
使用WCF服務應用程序,所有我見過的文檔到目前爲止,命名我的MSMQ隊列以匹配服務名稱假設我使用IIS網站下的應用程序或虛擬目錄。
這是從MSDN http://msdn.microsoft.com/en-us/library/ms789042.aspx
應用程序被激活必須匹配(最長匹配)前綴的隊列名稱的 引用。
例如,隊列名稱爲: msmqWebHost/orderProcessing/service.svc。如果應用程序1擁有一個 虛擬目錄/ msmqWebHost/orderProcessing,其下有一個service.svc ,並且應用程序2具有虛擬目錄/ msmqWebHost,其下的orderProcessing.svc爲 ,則應用程序1被激活。如果 應用程序1被刪除,則應用程序2被激活。
然而,當你正在主持在IIS 7中啓用了MSMQ服務WAS, 隊列名稱必須與服務的.svc文件的URI相匹配。在這個 示例中,我們將在稱爲 MsmqService的應用程序中託管服務,該應用程序使用名爲MsmqService.svc的.svc文件,因此必須將隊列 稱爲MsmqService/MsmqService.svc。用於WCF 服務隊列應始終是私人
而且,http://msdn.microsoft.com/en-us/magazine/cc163357.aspx
要注意,MSMQ激活正確端點只有 作品,如果隊列中有相同的名稱作爲.SVC是很重要的文件(減去 機器名稱)。這意味着如果您的服務端點是 /server/app/service.svc,則隊列名稱必須爲app/service.svc。
MyService.svc文件直接是我的IIS網站的根(這是使用集成模式下的.NET 4池)下,所以我做了以下內容:
- 創建私人事務性隊列稱爲MyService.svc並給予網絡服務完全控制權(用於測試)。
- 設置我的web.config端點:地址=「net.msmq://localhost/private/MyService.svc」
- 我能夠用使用的地址的客戶端測試應用程序推消息隊列( 2)。
- 我加了MSMQ協議支持,該網站通過執行以下:
C:\Windows\System32\inetsrv>appcmd set site "MyWebsite" /+bindings.[protocol='net.msmq',bindingInformation='localhost']
(並檢查它添加適當的支持) - 從我的網站的高級設置我有
http,net.tcp,net.msmq
在Enabled Protocols
- 我仔細檢查了該「網.Msmq偵聽器適配器「,它負責在消息到達時激活服務,正在運行並重新啓動它。
- 我
web.config
:
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
<add binding="netMsmqBinding" scheme="net.msmq" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"
multipleSiteBindingsEnabled="true" />
<bindings>
<netMsmqBinding>
<binding name="MsmqBinding_IMyService" exactlyOnce="true"
receiveErrorHandling="Move">
<security mode="None"/>
</binding>
</netMsmqBinding>
</bindings>
<services>
<service name="CompanyName.Service.MyService">
<endpoint name="MyService"
address="net.msmq://localhost/private/MyService.svc"
bindingConfiguration="MsmqBinding_IMyService"
binding="netMsmqBinding" contract="IMyService" >
</endpoint>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="false" />
</system.webServer>
</configuration>
我的服務是沒有得到新的消息的到達隊列激活和消息留在隊列中。那是因爲我沒有使用應用程序或虛擬目錄,或者有什麼我缺少的東西?