2012-02-28 69 views
2

我有一個WCF服務,使用MSMQ通信,當我在我的本地網絡上運行服務時,我配置服務端點在客戶端配置文件指向主機,例如如果服務主機上指定的終點是:MSMQ呼叫通過HTTP沒有到達目標隊列

<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監聽器,給予適當的訪問權限等(Pretty much everything in Tom Hollanders article),我甚至可以在瀏覽器中通過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的工作示例(如果有的話),那將非常棒。

任何幫助將不勝感激。提前致謝。

回答

4

我設法解決這個問題,我的郵件卡在客戶端機器的傳出隊列中,「DIRECT = TCP:HOSTSERVERIP \ private $ \ MsmqService/MyMsmqService.svc」隊列狀態爲'等待連接'並且下一跳是目標服務器的公有IP,所以客戶端無法連接到目標隊列,即使它可以ping目標服務器公共IP,結果MSMQ使用的端口1801監聽傳入的通信量在服務主機所在的網絡的路由器上不開放,開放端口1801一切工作都像一個魅力。這是一個根本性的問題,我想很多人都沒有在他們的文章/教程中提及它。希望以後這可以幫助別人。

+0

你能否回答http://stackoverflow.com/questions/9631349/what-is-outbound-transaction-in-layman-terms? – Lijo 2012-03-09 09:14:21

+0

這是如何回答這個問題的?使用HTTP上的MSMQ,您只需要打開端口80而不是任何其他端口(這就是整個問題!!)傳出隊列表明WCF客戶端不會試圖通過HTTP發送消息(否則您會得到一個HTTP前綴而不是操作系統前綴)! – tommed 2013-08-29 07:12:32

+0

嗯,我記得當我這樣做時,我從家用電腦調用服務,服務在我們辦公室的服務器上託管,郵件未到達主機服務器上的隊列以及MSDN論壇上的某個地方有人建議在主機的網絡上打開端口1801,所以我將傳入的流量轉發到端口1801到主機,它的工作...你說什麼是有道理的,這就是爲什麼我甚至不打擾打開該端口,但它是我當時的解決方案。說實話,我不能告訴你爲什麼它的工作,但它確實。 – 2013-08-29 08:32:21