Recaller 物件
商務程序管理解決方案會以一般的方法來重試某些失敗的物件方法呼叫。 解決方案會透過ExceptionHandler協調流程中的Recaller物件執行此動作。 ExceptionHandler協調流程會使用 物件來重試物件方法呼叫。 如需詳細資訊,請參閱 ExceptionHandler 協調流程。
Recaller物件具有單一靜態方法Invoke。 因為它是靜態的,所以您永遠不需要建立 Recaller 物件的實例。 您可以使用 Invoke 方法的三種方式:建構物件、呼叫物件的靜態方法,或呼叫物件的非靜態方法。
注意
Invoke方法可作為 .NET Framework 類別庫中Type.InvokeMember方法的包裝函式。
下表描述 Invoke 方法的引數:
參數 | 類型 | Description |
---|---|---|
t | 類型 | 呼叫方法的物件類型。 |
obj | Object | 要使用的物件執行個體。 |
methodName | string | 所要叫用之方法的名稱。 |
args | 陣列 | Object類型的陣列,其中包含方法的引數。 |
若要呼叫 物件的建構函式,請使用空字串 (「」「) 或 null 作為 methodName。
若要呼叫靜態方法,請使用 null 作為 obj。
若要呼叫非靜態方法,請提供所有引數。
注意
使用 null 作為 Type 引數 t的值會導致 Invoke 擲回 ArgumentNullException 例外狀況 。 引數t不應為 null,因為Invoke方法會使用Type.InvokeMember .NET Framework 方法。
在方案中,只有 ExceptionHandler 協調流程會使用 Recaller 物件。 ExceptionHandler會接著由其他協調流程使用。 傳遞至 Invoke 方法的值來自這些其他協調流程。 例如,下列程式碼會出現在InitialException運算式圖形的啟動協調流程中:
Ex = CodeEx;
ObjectType = orderHandler.GetType();
CalledObject = orderHandler;
Reason = "Standard Activate Failed";
MethodName = "Activate";
ParameterArray = System.Array.CreateInstance(typeof(System.Object),
3 );
ParameterArray.SetValue(ServiceType, 0);
ParameterArray.SetValue(OrderMsg.CustNum, 1);
ParameterArray.SetValue(OrderMsg.OrderNum, 2);
ReturnValue = null; // no return value expected
請注意程式碼如何使用 System.Array.CreateInstance 建立陣列,並使用 SetValue 方法來儲存其中所使用的值。
在運算式圖形之後,Activate 協調流程會呼叫 ExceptionHandler 協調流程。 下列程式碼顯示協調流程設計師如何轉譯「呼叫」圖形:
call Microsoft.Samples.
BizTalk.SouthridgeVideo.
OrderManager.ExceptionHandlerOrch
(
Reason,
Ex,
CalledObject,
MethodName,
ParameterArray,
OrderCorrelation,
OrderMsg,
out ReturnValue,
ObjectType
);
在 ExceptionHandler 協調流程中,下列程式碼會出現在 [呼叫原始程式碼 運算式] 圖形中:
ReturnValue =
Microsoft.Samples.
BizTalk.SouthridgeVideo.
Utilities.Recaller.
Invoke(
ObjectType,
CalledObject,
MethodName,
ParameterArray
);
請注意,雖然引數名稱符合 Activate 協調流程呼叫中的引數名稱,但呼叫協調流程時,是依照順序而不是名稱來對應引數。