閱讀英文

共用方式為


傳送至 MSMQ 的大型訊息

大型訊息至 MSMQ 範例示範如何使用由 MQRTLarge.dll 實作的 MQSendLargeMessage API,從消息 (佇列傳送大於 4 MB (MB) 的 .xml 檔至 BizTalk MSM) Q 配接器。

此範例的用途

範例的運作方式如下:

  1. 使用者會使用 SendLargeMessage.exe 將大型 .xml 檔案傳送至本機電腦上的佇列。

  2. BizTalk Server會從佇列接收大型 .xml 檔案,並將它複製到本機目錄。

    訊息佇列中的許多作業都是非同步。 也就是說,許多 MSMQ API 呼叫 (例如 ,MQSendLargeMessage) 在要求作業完成之前返回呼叫端。

    MSMQ 提供一項機制,會在作業全部完成之後將回應傳遞至應用程式。 此機制牽涉到使用「管理員佇列」。MSMQ 會以管理員佇列中的訊息形式傳回意見反應。 當進行原始 MSMQ API 呼叫時,便會指定 MSMQ 要將回應傳送所至的管理佇列。 例如,使用MQSendLargeMessage API 傳送訊息時,應用程式可以使用在呼叫MQSendLargeMessage的訊息上使用PROPID_M_ADMIN_QUEUE訊息屬性來指定管理員佇列的名稱。 即使應用程式可能會在MQSendLargeMessage呼叫上取得成功的傳回碼,但如果訊息傳送作業後續失敗,MSMQ 仍會將訊息寫入至該效果的指定管理員佇列。

    如果應用程式未指定管理佇列,傳送失敗將會導致訊息遺失而無法擷取診斷資訊,訊息將會毫無跡象地消失。 MSMQ 中的許多錯誤情況可能會導致這種情況發生,例如,執行非交易式傳送至交易式佇列。

    在此範例的內容中,程式碼務必在 MQSendLargeMessage 的呼叫中指定交易類型,這與訊息傳送至佇列的交易支援一致。 如果未完成,而且未指定任何管理員佇列 (,如同此範例) 的情況,MSMQ 會捨棄傳送的訊息,但未指出已傳送的訊息 (,否則不會傳回任何錯誤碼給應用程式、未寫入事件記錄檔的診斷,依此類) 。

可在何處找到此範例

<範例 Path > \AdaptersUsage\MSMQLarge

注意

如果使用 64 位版本的 Windows 和 BizTalk Server,範例將會安裝在C:\Program Files (x86) \Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge資料夾中。 請使用 C:\Program Files 資料夾,記下本檔中任何其他指示的這項變更。

下表顯示此範例中的檔案,並描述其用途。

檔案 說明
MQRTLarge.dll 提供原生訊息佇列的附加元件。 公開 MQSendLargeMessageMQReceiveLargeMessage API。

您必須在 64 位版本的 Windows 上安裝BizTalk Server,才能存取 64 位版本的 MQRTLarge.dll。

對於不含BizTalk Server的 MSMQ 解決方案,MQRTLarge.dll 仍可正常運作。 不過,這不是 Microsoft 支援的建議設定,如果BizTalk Server環境外部使用,可能會發生非預期的結果。
LargeMessages.sln 提供 Visual Studio 解決方案以建立範例中使用的 SendLargeMessage 可執行檔。
XMLCreator.sln 提供 Visual Studio 解決方案來建立 XMLCreator 可執行檔,以產生 SDK 範例的測試 .xml 檔案。

設定 BizTalk 並建立 MSMQ 佇列

確定已安裝 Visual Studio、Microsoft Message Queuing 和 BizTalk Server。

設定 BizTalk Server

  1. 在 Visual Studio 中,開啟C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\LargeMessages.sln方案檔。 建置範例。

  2. 建立C:\Demo目錄,其中BizTalk Server會從 MSMQ 放置訊息。

  3. 開啟 BizTalk Server 管理主控台。

  4. 建立範例的傳送埠以寫入訊息。

    • 依序展開 [BizTalk 群組]、[ 應用程式]、[ BizTalk 應用程式 1]、以滑鼠右鍵按一下 [ 傳送埠]、[ 新增],然後按一下 [ 靜態 One-Way 傳送埠]。
  5. 在 [ 靜態 One-Way 傳送埠屬性 ] 對話方塊中,將埠的名稱設定為 MySendPort

  6. 將傳輸類型設定為 [檔案]。

  7. 按一下 [ 設定] 按鈕以開啟 [ 檔案傳輸屬性] 表單。 在目的地資料夾中輸入C:\Demo。 確定主機實例身分識別可以存取 C:\Demo 資料夾。

  8. 確定 [檔案名 ] 設定為 %MessageID%.xml。 按一下 [確定]。

  9. 按一下 [篩選]

    1. 屬性 設定為 BTS。ReceivePortName

    2. 將 [運算子] 設定為 =

    3. [值 ] 設定為 MyReceivePort

    4. 按一下 [確定]。

  10. 建立接收埠以接受來自 MSMQ 的訊息。

    1. 在 BizTalk Server 管理主控台中,以滑鼠右鍵按一下 [接收埠]。

    2. 按一下 [新增],然後按一下 [單向接收埠]。

  11. 在 [ 接收埠屬性 ] 對話方塊中,將埠的名稱設定為 MyReceivePort,然後按一下 [ 確定]。

  12. 建立範例的接收埠之後,您必須建立一個接收位置。

    1. 在 BizTalk Server 管理主控台中,以滑鼠右鍵按一下 [接收位置]。

    2. 按一下 [新增],然後按一下 [單向接收位置]。

    3. 將接收位置的名稱設定為 MSMQReceiveLocation

    4. 在 [ 選取接收埠 ] 對話方塊中,選取 [MyReceivePort]。

    5. 在 [ 接收位置屬性 ] 對話方塊中,將 [傳輸類型 ] 設定為 MSMQ

    6. 在 [ 位址 (URI) ] 區段中,按一下 [ 設定 ] 以開啟 MSMQ 傳輸屬性 表單。 將 [佇列 ] 設定為 localhost\private$\test

    7. [交易式] 設定為 True ,然後按一下 [ 確定]。

  13. 您必須讓埠和接收位置可供透過 BizTalk Server 管理主控台使用。

    1. 以滑鼠右鍵按一下 [MySendPort],然後按一下 [ 登記]。

    2. 以滑鼠右鍵按一下 [MySendPort],然後按一下 [ 開始]。

    3. 以滑鼠右鍵按一下 [MSMQReceiveLocation],然後按一下 [ 啟用]。

在 Windows Server 中建立 MSMQ 佇列

  1. 按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。

  2. 展開 [ 功能] 節點。

  3. 展開 [訊息佇列] 節點。

  4. 以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。

  5. [佇列名稱] 下,輸入 test。 確定已選取 [ 交易式 ] 核取方塊。

  6. 按一下 [確定]。

在 Windows 中建立 MSMQ 佇列

  1. 按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。

  2. 展開 [服務和應用程式],然後展開 [訊息佇列] 節點。

    注意

    如果電腦未安裝訊息佇列,請移至[主控台 > 程式 > 及功能],然後選取 [開啟或關閉 Windows 功能]。 檢查 Microsoft Message Queue (MSMQ) Server下的所有功能,然後按一下 [ 確定]。

  3. 以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。

  4. [佇列名稱] 下,輸入 test。 確定已選取 [ 交易式 ] 核取方塊。

  5. 按一下 [確定]。

建立測試檔案並執行範例

若要建立大型測試檔案

  1. 在 Visual Studio 中,開啟解決方案C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\XMLCreator\XMLCreator.sln

  2. 建置並執行專案。

  3. [XML 本文] 底下,輸入 這是測試訊息

  4. 複製 XML 本文的次數下,輸入 250000

  5. [XML 檔案位置]下,輸入 C:\Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersUsage\MSMQLarge\LargeFile.xml

  6. 按一下 [建立 XML],然後按一下 [ 確定]。

執行範例

  1. 開啟命令提示字元,並將目錄變更為C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\SendLargeMessage\bin\debug

  2. 在命令提示字元中,執行 SendLargeMessage.exe。 SendLargeMessage 可執行檔接受兩個變數:第一個變數是 MSMQ 佇列的位置,而第二個則是要傳送之 .xml 檔案的位置:

    DIRECT=OS:localhost\private$\Test  "C:\Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersUsage\MSMQLarge\LargeFile.xml"  
    
  3. 確認在C:\Demo目錄中的BizTalk Server電腦上已建立大小相同的檔案。 這是您在 MySendPort 傳送埠中找到的目錄。

註解

SendLargeMessage.exe 參考 LargeMessages API,接著會參考 BizTalk 訊息佇列大型訊息延伸模組 (MQRTLarge.dll) API。 訊息佇列大型訊息延伸模組 API 是原生訊息佇列的附加元件,可處理大於原生訊息佇列 4 MB 限制的訊息。

此範例會使用MQSendLargeMessage API,並使用LargeMessages API 向.NET Framework公開 API。

另請參閱

BizTalk 訊息佇列大型訊息延伸模組
配接器範例 - 用法