共用方式為


執行訊息保存自訂例外狀況處理常式範例

訊息保存自訂例外狀況處理常式範例示範鬆散結合的泛型處理常式,可接收錯誤訊息、擷取其包含的 Microsoft BizTalk 訊息,並將其寫入為檔案系統的磁片檔案。

此範例示範如何在協調流程中使用自訂例外狀況處理常式。 當協調流程中的進程 (EAIProcess.odx) 發生錯誤時,例外狀況處理常式會產生併發布 ESB 錯誤訊息。 這個錯誤訊息包含在其承載中,訊息 (包括其 BizTalk 相關內容屬性,) 發生例外狀況時「正式發行前小眾測試」,以及 BizTalk 協調流程引擎所攔截的目前 System.Exception 實例。 發生這種情況時,「拒絕」訊息和「已核准」訊息會與錯誤訊息一起保存。

名為 EAIGenericHandler.odx 的第二個協調流程,以分離的方式部署,並做為自訂例外狀況處理常式,訂閱 EAIGenericHandler.odx 協調流程中產生的特定錯誤碼,並取用錯誤訊息。 此例外狀況處理常式會將原始訊息擷取 (為無類型檔) ,而 System.Exception 實例原本保存在錯誤訊息中。

訊息保存自訂例外狀況處理常式範例與修復和重新提交自訂例外狀況處理常式範例不同,因為此範例中使用的 EAIGenericHandler.odx 協調流程不相依于錯誤發佈協調流程程式中所使用的架構, (EAIProcess.odx) 。 具體而言,EAIGenericHandler.odx 協調流程會從錯誤訊息擷取原始訊息,作為 System.Xml。XmlDocument 實例,而不是以 EAIProcess.odx 協調流程中使用的架構為基礎的具型別訊息。 它也會以程式碼可以輕鬆地列舉的集合傳回訊息。

自訂例外狀況處理常式 (EAIGenericHandler.odx) 然後將 「Denied」 和 「Approved」 訊息寫入檔案系統位置 \Source\Samples\Exception Handling\Test\Filerop\EAIGenericHandler.PostTmpMsg。

此外,還有一個名為 ALL 的一般傳送埠。Exceptions_FILE設定為使用安裝為 Microsoft BizTalk ESB 工具組例外狀況管理架構一部分的 GlobalFaultProcessor 管線。 此埠會訂閱系統中的所有例外狀況,包括 BizTalk 失敗的訊息路由訊息和 ESB 錯誤訊息。 例外狀況管理架構會將它們正規化為單一格式,並使用 Microsoft InfoPath 處理指示將它們序列化為位置 \Source\Samples\Exception Processing\Test\Filedrop\All_Exceptions。

安裝

所有例外狀況管理範例都會使用相同的核心服務和 BizTalk 應用程式成品集。 因此,您只需要安裝例外狀況管理範例成品一次,才能執行所有例外狀況管理範例。 如需如何安裝例外狀況管理範例的資訊,請參閱 安裝例外狀況管理範例

執行範例應用程式

執行訊息保存自訂例外狀況處理常式範例

  1. 第一次執行此範例之前,請確定接收位置,並將埠 URL 指向 \Source\Samples\Exception Handling\Test\Filedrop 資料夾中的適當目錄。 接收位置應該指定 EAIProcess.RequestPort 資料夾,而傳送埠 URL 應該指定 EAIGenericHandler.PostTmpMsg 資料夾。

  2. 如果 GlobalBank.ESB 應用程式尚未執行,請使用 BizTalk 管理主控台加以啟動。

  3. 將名為 Request_EAIGenericHandler.xml 的範例檔案複製到 \Source\Samples\Exception Handling\Test\Data 資料夾中指定的 EAIProcess.RequestPort_FILE資料夾,以啟動範例:\Source\Samples\Exception Handling\Test\Filerop\EAIProcess.RequestPort。

  4. 在 \Source\Samples\Exception Handling\Test\Filedrop\ 資料夾) 中開啟名為 EAIGenericHandler.PostTmpMsg 的資料夾 (。 您會看到原始訊息。

範例的運作方式

您提交的訊息會啟動 EAIProcess 協調流程。 當 EAIProcess 協調流程處理訊息時,它會嘗試將 1 除以單價。 因為單價為零,所以會發生零除例外狀況。 協調流程事件處理常式中的程式碼會攔截此例外狀況,並建立錯誤訊息。 訊息中的訂單數量小於 10,因此商務邏輯會指示此例外狀況的 FaultCode 域值為 2000

然後,EAIProcess 協調流程會透過直接系結的埠,將錯誤訊息發佈至 BizTalk 訊息方塊,而協調流程會結束。

名為 EAIGenericHandler 的自訂錯誤處理常式協調流程,其訂閱 具有 FaultCode 域值為 2000的訊息,會挑選新的錯誤訊息。 協調流程中的程式碼會從例外狀況擷取所有訊息, (錯誤) 訊息,並將其寫入磁片檔案。