2011-10-06 59 views
1

我想測試在可能連接或未連接的遠程客戶端上排隊消息的可能性,這些客戶端在連接時會將通過Internet發送到msmq的消息即託管在IIS 6中。在IIS 6中託管MSMQ並通過WCF發送郵件

現在,我在託管IIS的win server2003上設置MSMQ。在我完成這個「MSMQ」後,在IIS默認網站上顯示出來。

好吧,然後我通過計算機管理 - >消息隊列添加了一個新的事務專用隊列。

從那裏我想要做的就是看到消息堆積起來,我會在這些作品後處理這些消息。

現在,我做了有下面的代碼客戶端應用程序:

 using (var contract = new HttpMsmqBridgeProxy()) 
    { 
     var valueToSend = 2456; 
     contract.TestFunction(valueToSend); 
     Console.WriteLine("value sent: " + valueToSend + "\r\n"); 
    } 

下面是這個客戶端的的app.config:

<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint 
     address="net.msmq://**.**.***.228/private/MarksTestHttpQueue" 
     binding="netMsmqBinding" 
     bindingConfiguration="srmpBinding" 
     contract="HttpMsmqBridgeLibrary.IHttpMsmqBridgeContract"> 
     </endpoint> 
    </client> 
    <bindings> 
     <netMsmqBinding> 
     <binding name="srmpBinding" 
       queueTransferProtocol="Srmp"> 
      <security mode="None"/> 
     </binding> 
     </netMsmqBinding> 
    </bindings> 
    </system.serviceModel> 
</configuration> 

的IP是我的面向公衆的IP的作品,我可以託管一個wcf服務或網頁就好了。我遵循這個指南有點使用srmpBinding。

http://msdn.microsoft.com/en-us/library/aa395217.aspx

因此,總之什麼,當我運行的應用程序是它成功發生了,告訴我有人送,我去到消息隊列我的客戶,看到一個新的隊列中傳出文件夾中露面稱爲:

直接:http:// * .228/msmq/private $/MarksTestHttpQueue

在此隊列中沒有等待發送的消息,因此我假設消息已發送。

當我在winserver2003上查看我的msmq時,沒有到達排隊等待的消息。

ETA:

 var queue = new MessageQueue("FormatName:DIRECT=http://**.**.***.228/msmq/private$/nonTransQueue"); 
    System.Messaging.Message Msg; 
    Msg = new System.Messaging.Message(); 
    Msg.Formatter = new ActiveXMessageFormatter(); 
    Msg.Body = "Testing"; 
    queue.Send(Msg); 

的消息顯示(改變在system32/MSMQ /映射目錄映射文件後)就好了:我可以用經典的MessageQueue implimintation將消息發送到非事務性隊列。我想知道是否因爲它是IIS6我將無法使用net.msmq綁定發送。

+0

如果您通過HTTP發送到事務性隊列,發件人需要MSMQ並在本地安裝HTTP支持來接收目標發回的ACK消息。發送到非事務性隊列不會。 –

回答

1

您是正確的,因爲您在IIS6中託管的WCF服務將無法處理消息。這是因爲IIS6不使用WAS實例化非HTTP請求的進程。但我認爲這是在工作流程中所做的一切之後。我會期待

    你運行你的客戶
  • ,推消息發送到遠程隊列
  • 出現在遠程隊列
  • WCF服務不皮卡的消息,因爲它是在託管消息IIS6,因此您在遠程隊列中留下了一條消息。

我不相信IIS一直參與,直到它不會工作的地步。

這樣做的一個簡單的測試是要自你的主機服務器上的服務,例如在控制檯應用程序中運行它。它將能夠像IIS7一樣接受MSMQ消息,並將從您的鑽機中消除潛在的問題。

您可能還想測試是否可以將消息直接從客戶端推送到服務器上的事務性隊列。如果在將消息發送到其他機器上的事務隊列時遇到問題,則可以檢查MSDTC日誌。我不羨慕必須鑽研那裏。