SendMSMQMessage
SendMSMQMessage 範例將示範如何從 .NET 架構的應用程式將訊息傳送至 MSMQ 連接埠。 它也提供如何設定 Microsoft BizTalk Server以使用 MSMQ 接收位置的指示。
您應該注意訊息佇列中的許多作業都是非同步。 也就是說,許多 MSMQ API 呼叫 (例如 System.Messaging.MessageQueue.Send) 在要求作業完成之前返回呼叫端。 MSMQ 提供一項機制,會在作業全部完成之後將回應傳遞至應用程式。 此機制牽涉到使用「管理員佇列」。MSMQ 會以管理員佇列中的訊息形式傳回意見反應。 當進行原始 MSMQ API 呼叫時,便會指定 MSMQ 要將回應傳送所至的管理佇列。 例如,使用System.Messaging.MessageQueue.Send API 傳送訊息時,應用程式可以使用呼叫System.Messaging.MessageQueue.Send中的訊息上的 PROPID_M_ADMIN_QUEUE message 屬性來指定管理員佇列的名稱。 即使應用程式可能會在System.Messaging.MessageQueue.Send呼叫上取得成功的傳回碼,但如果訊息傳送作業後續失敗,MSMQ 仍會將訊息寫入至指定的管理員佇列。 如果應用程式未指定管理員佇列,傳送失敗會導致訊息遺失,而且不會擷取任何診斷—實際上,訊息會消失而沒有任何辨識項。 MSMQ 中有一些錯誤情況可能會導致這種情況發生,例如,執行非交易式傳送至交易式佇列。
在此範例的內容中,程式碼必須在呼叫 System.Messaging.MessageQueue.Send 中指定交易類型,這與訊息傳送至佇列的交易支援一致。 如果未完成,而且未指定任何管理員佇列 (,如同此範例) 的情況,MSMQ 會捨棄傳送的訊息,但未指出已傳送的訊息 (,否則不會傳回任何錯誤碼給應用程式、未寫入事件記錄檔的診斷,依此類) 。
<範例路徑 > \AdaptersUsage\SendMSMQMessage\
下表顯示此範例中的檔案,並描述其用途。
檔案 | Description |
---|---|
App.ico、AssemblyInfo.cs、SendMSMQMessage.csproj、SendMSMQMessage.sln | 針對此範例的簡單圖形化應用程式,提供專案、解決方案和相關檔案。 |
Form1.cs、Form1.resx | 針對此範例的簡單圖形化應用程式,提供 Microsoft Visual C#.NET 來源和表單檔案。 |
您可以使用此範例隨附之簡單圖形應用程式中的程式碼,作為如何將訊息傳送至 MSMQ 接收位置的範例,從 BizTalk Server。啟用 NET 的應用程式,例如 Microsoft Office,從 ASP.NET 網頁等等。
使用 Visual Studio 開啟方案檔 SendMSMQMessage.sln。
在 [建置] 功能表上,按一下 [建置方案]。
使用下列程式來設定BizTalk Server並建立 MSMQ 佇列來執行範例。
按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。
展開 [ 功能] 節點。 如果未安裝 訊息佇列 ,請以滑鼠右鍵按一下 [功能 ],然後選取 [ 新增功能]。 核取 [訊息佇列],按 [ 下一步],然後按一下 [ 安裝 ] 在該系統上安裝 MSMQ。
展開 [訊息佇列] 節點。
以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。
在 [佇列名稱] 下,輸入
test
。 確定已選取 [ 交易式 ] 核取方塊。按一下 [確定]。
按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。
展開 [服務和應用程式],然後展開 [訊息佇列] 節點。
注意
如果電腦未安裝訊息佇列,請移至[主控台 > 程式 > 及功能],然後選取 [開啟或關閉 Windows 功能]。 檢查 Microsoft Message Queue (MSMQ) Server下的所有功能,然後按一下 [ 確定]。
以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。
在 [佇列名稱] 下,輸入 test。 確定已選取 [ 交易式 ] 核取方塊。
按一下 [確定]。
選取要接收訊息的資料夾。 下列步驟假設您已選取 C:\Demo\Report,不過您可以視需要調整步驟以使用其他資料夾。
開啟 BizTalk Server 管理主控台。
建立名為 MSMQSample的新應用程式。
以滑鼠右鍵按一下 [接收埠],按一下 [ 新增],然後按一下 [單向接收埠]。
在 [ 接收埠屬性 ] 對話方塊的 [ 名稱 ] 方塊中,輸入 MyReceivePort,然後按一下 [ 確定]。
以滑鼠右鍵按一下 [接收位置],按一下 [ 新增],然後按一下 [單向接收位置]。 在 [ 選取接收埠 ] 對話方塊中,選取您剛才建立的接收埠,然後按一下 [ 確定]。
在 [ 接收位置屬性 ] 對話方塊的 [ 名稱 ] 方塊中,輸入接收埠的名稱,例如 MSMQReceiveLocation。
在 [ 接收位置屬性 ] 對話方塊中,針對傳輸類型選取 [MSMQ ]。
按一下 [ 設定 ] 以開啟 [MSMQ 傳輸屬性 ] 對話方塊。 將 [佇列 ] 設定為
localhost\private$\test
,將 [交易式] 設定為True
,然後按一下 [ 確定]。展開應用程式,依序選取 [ 傳送埠]、[ 新增]、[ 靜態單向傳送埠]。
在 [ 傳送埠屬性 ] 對話方塊的 [ 名稱 ] 方塊中,輸入傳送埠的名稱,例如 MySendPort。
將 [傳輸類型] 屬性設定為 FILE。
按一下 [ 設定 ] 以開啟 [ 檔案傳輸屬性 ] 對話方塊。
在 [ 檔案傳輸屬性 ] 對話方塊中,將 [ 目的地資料夾 ] 屬性設定為 C:\Demo\Report,保留其他屬性的預設設定,然後按一下 [ 確定]。
選取 [篩選],然後將 [屬性 ] 設定為 BTS 以新增資料列 。ReceivePortName。 將 [運算子] 資料行設定為 == ,將 [ 值 ] 資料行設定為 MyReceivePort,然後按一下 [ 確定]。
以滑鼠右鍵按一下新的傳送埠,然後按一下 [ 登記]。
再次以滑鼠右鍵按一下新的傳送埠,然後按一下 [ 啟動]。
以滑鼠右鍵按一下新的接收位置,然後按一下 [ 啟用]。
BizTalk Server 現在已準備就緒可使用此範例。
使用下列程序執行 SendMSMQMessage 範例。
在命令視窗中,瀏覽至下列資料夾:
<範例路徑 > \AdaptersUsage\SendMSMQMessage\bin\Debug
執行檔案 SendMSMQMessage.exe,這會啟動提供此範例使用者介面的圖形化應用程式。
在圖形化應用程式中的 [ BizTalk 電腦名稱稱 ] 方塊中,輸入本機電腦的名稱。
嘗試傳送 包裝 選項:
選擇性地變更 [訊息本文 ] 方塊中的文字。
按一下 [傳送包裝]。
如果作業成功,您會看到下列內容:
[成功] 這個字會出現在按鈕正上方方塊中的紅色字型。
檔案會出現在目的地資料夾中,C:\Demo\Reports。 此檔案包含 .NET 訊息佇列程式庫包裝在簡單 XML 標籤的 [訊息本文 ] 方塊中的文字。
如果作業失敗,您將在按鈕正上方的方塊中看見錯誤訊息。
嘗試 [ 傳送精確] 選項:
選擇性地變更 [訊息本文 ] 方塊中的文字。
按一下 [確切傳送]。
如果作業成功,您會看到下列內容:
[成功] 這個字會出現在按鈕正上方方塊中的紅色字型。
檔案會出現在目的地資料夾中,C:\Demo\Reports。 此檔案包含 [ 訊息本文 ] 方塊中的文字,與文字方塊中顯示的文字完全相同。
如果作業失敗,您將在按鈕正上方的方塊中看見錯誤訊息。