0

讓我們考慮一下業務流程。主要活動發生在具有2個關聯的Catch Exception形狀的範圍形狀中:1個用於System.Exception和1個常規異常。這種編排使用了一個「助手」C#類庫,而BizTalk scope/catch捕獲在庫中引發的異常,以及它們內部發生的未處理的異常。在Biztalk中處理例外情況,這種情況不會被範圍形狀捕獲

我想知道我可以創建的問題是:假設一個輔助函數庫的版本被髮布,並且突然之間存在一個以前存在的方法,編排會嘗試調用它。不可避免地會出現一個MissingMethodException,這種情況一旦達到Scope形狀就會發生。

MissingMethodException未被編排捕獲,因此消息被暫停。我意識到,通過適當的測試,這絕不應該發生,但我只是想覆蓋所有基地,如果他們發生(真的只是出於好奇)。

有沒有辦法來捕捉這些異常,或者因爲它似乎發生在調用範圍之前的級別?

回答

2

我想通了。我不得不將整個範圍包含在其他範圍內使用我的幫助程序庫的形狀。看起來.dll(對於助手類庫)必須在達到範圍後立即加載和評估。

如果您查看附加圖像,我的幫助程序庫將用於「ValidateWrapper」表達式形狀中,但是在調用MissingMethodException之前,協調程序甚至沒有完成它(由於輔助程序中缺少方法類庫),「GeneralScope」形狀無法捕獲MissingMethodException,但只要我將GeneralScope包裝在另一個示波器中,MissingMethodException就被抓住了,可以處理。

這一切都是因爲我通過BizTalk管理控制檯更新了輔助類資源,因此編譯器無法警告缺少的方法......但至少現在我知道如果它再次發生,我可以捕獲異常。

enter image description here

1

您應該知道,BizTalk中的編排中的異常與.NET中的處理方式相同:異常始終從基類System.Exception繼承。

例如說你有一個自定義的MissingMethodException(它繼承自System.Exception),那麼你可以捕獲MissingMethodException(有任何特定的數據)或System.Exception。如果沒有特定的MissingMethodException異常處理程序,它們都會觸發System.Exception異常處理程序。

欲瞭解更多信息,我建議閱讀http://www.codeproject.com/Articles/125470/Exception-Handling-for-C-Beginners

BizTalk業務流程不會比在.NET中的任何其他異常的那一部分不同。

希望這會有所幫助。

+0

感謝您的評論。我知道異常是如何工作的以及如何處理它們。我可能沒有在原文中說清楚,但我正在處理大多數異常,但使用2個範圍1:System.Exception和2:BizTalk的「General Exception」。問題是,似乎biztalk作用域可能會在加入作用域之前預先加載幫助程序庫並找到缺失的方法,因此Catch沒有捕獲它。 – Bensonius