執行修復和重新提交自訂例外狀況處理常式範例
修復和重新提交自訂例外狀況處理常式範例示範將人為介入整合到 ESB 和 Microsoft BizTalk 型應用程式程式並實作實用設計模式的極有效技術。 範例程式碼會順暢地整合到 ESB 例外狀況管理系統中。
此範例示範如何在協調流程中使用自訂例外狀況處理常式。 當協調流程中的進程 (EAIProcess.odx) 發生錯誤時,例外狀況處理常式會產生併發布 ESB 錯誤訊息。 這個錯誤訊息在其承載中包含訊息 (包括其 BizTalk 相關內容屬性,) 發生例外狀況時「正在執行中」,以及 BizTalk 協調流程引擎攔截到目前的 System.Exception 實例。 發生這種情況時,「拒絕」訊息和「已核准」訊息會與錯誤訊息一起保存。
名為 EAIProcessHandler.odx 的第二個協調流程,以分離的方式部署,並做為自訂例外狀況處理常式,訂閱 EAIProcess.odx 協調流程中產生的特定錯誤碼,並取用錯誤訊息。 這個例外狀況處理常式會將原始訊息擷取 (為具類型的檔,) 和原本保存在錯誤訊息中的 System.Exception 實例。
原始訊息現在可供處理其所有原始內容屬性。 自訂例外狀況處理常式 (EAIProcessHandler.odx) 然後將 「拒絕」和「已核准」訊息寫入下列位置的檔案系統:
核准的訊息:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
修復並重新提交遭拒的訊息:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
拒絕的訊息:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline
例外狀況處理常式會使用 Microsoft InfoPath 處理指示序列化修復和重新提交檔案系統的「拒絕」訊息。 InfoPath 範本可讓使用者編輯表單,並重新提交結果 (請參閱圖 1) ,這會啟動驗證訊息的 EAIProcess.odx 協調流程。
圖 1
InfoPath 修復和重新提交範本所產生的測試訊息
此外,還有一個名為 ALL 的一般傳送埠。Exceptions_FILE設定為使用 GlobalFaultProcessor 管線。 此埠會訂閱系統中的所有例外狀況,包括 BizTalk 失敗的訊息路由訊息和 ESB 錯誤訊息。 例外狀況管理架構會將它們全部正規化為單一格式,並使用 InfoPath 處理指示將它們序列化至資料夾 \Source\Samples\Exception Processing\Test\Filedrop\All_Exceptions。
安裝
所有例外狀況管理範例都會使用相同的核心服務和 BizTalk 應用程式成品集。 因此,您只需要安裝例外狀況管理範例成品一次,才能執行所有例外狀況管理範例。 如需如何安裝例外狀況管理範例的資訊,請參閱 安裝例外狀況管理範例。
執行範例應用程式
若要執行修復並重新提交自訂例外狀況處理常式範例
第一次執行此範例之前,請確定接收位置和傳送埠 URL 指向 \Source\Samples\Exception Handling\Test\Filedrop 資料夾中的適當目錄。 接收位置應該指定 EAIProcess.RequestPort 資料夾,而傳送埠 URL 應該指定 EAIProcess.PostApproval 和 EAIProcessHandler.PostDecline 資料夾。
如果 GlobalBank.ESB 應用程式尚未執行,請使用 BizTalk 管理主控台加以啟動。
將名為 Request_EAIProcessHandler.xml 的範例檔案複製到 \Source\Samples\Exception Handling\Test\Data 資料夾中指定的 EAIProcess.RequestPort_FILE資料夾,以啟動範例:\Source\Samples\Exception Handling\Test\Filerop\EAIProcess.RequestPort。
在 \Source\Samples\Exception Handling\Test\Filedrop 資料夾) 中開啟名為 EAIProcessHandler.PostDecline 的資料夾 (。 您會看到例外狀況處理協調流程所產生的「已拒絕*」訊息。
開啟 \Source\Samples\Exception Handling\Test\Filedrop 資料夾) 中名為 EAIProcessHandler.RepairSubmit 的資料夾 (。 您會看到例外狀況處理協調流程所產生的「RepairSubmit」訊息。
按兩下 RepairSubmit 檔案,以在適當的 InfoPath 範本中開啟它。 您會看到訊息已準備好進行編輯和重新提交。
將 [單價 ] 欄位的值從 0 變更為 2,然後按一下 InfoPath 表單工具列上的 [ 提交 ] 按鈕,將編輯的檔送回 BizTalk 進行處理。 提交程式會使用 BizTalk 設定的 HTTP 接收位置。
流覽至 \Source\Samples\Exception Handling\Test\Filedrop 資料夾) 中的 EAIProcess.PostApproval 資料夾 (。 您現在會看到包含單價更新值的「核准*」檔。
範例的運作方式
您提交的訊息會啟動 EAIProcess 協調流程。 當 EAIProcess 協調流程處理訊息時,它會嘗試將 1 除以單價。 因為單價為零,所以會發生零除例外狀況。 協調流程事件處理常式中的程式碼會攔截此例外狀況,並建立錯誤訊息。 訊息中的訂單數量大於 10,因此商務邏輯會指示此例外狀況的 FaultCode 域值為 1000。
然後,EAIProcess 協調流程會透過直接系結的埠,將錯誤訊息發佈至 BizTalk 訊息方塊,而協調流程會結束。
名為 EAIProcessHandler 的自訂錯誤處理常式協調流程,其訂閱 具有 FaultCode 域值為 1000的訊息,會挑選新的錯誤訊息。 協調流程中的程式碼會建立「拒絕」訊息和 InfoPath 檔案,然後將它放入 EAIProcessHandler.PostDecline 和 EAIProcessHandler.RepairSubmit 資料夾以供人為介入。