Recaller 개체
비즈니스 프로세스 관리 솔루션은 실패한 일부 개체 메서드 호출을 일반적인 방식으로 다시 시도합니다. 솔루션은 ExceptionHandler 오케스트레이션의 Recaller 개체를 통해 이 작업을 수행합니다. ExceptionHandler 오케스트레이션은 개체를 사용하여 개체 메서드 호출을 다시 시도합니다. 자세한 내용은 ExceptionHandler 오케스트레이션을 참조하세요.
Recaller 개체에는 단일 정적 메서드 Invoke가 있습니다. 정적이므로 Recaller 개체의 instance 만들 필요가 없습니다. Invoke 메서드는 개체를 생성하거나, 개체에 대한 정적 메서드를 호출하거나, 개체에 대해 비정적 메서드를 호출하는 세 가지 방법으로 사용할 수 있습니다.
참고
Invoke 메서드는 .NET Framework 클래스 라이브러리의 Type.InvokeMember 메서드에 대한 래퍼 역할을 합니다.
다음 표에서는 Invoke 메서드에 대한 인수에 대해 설명합니다.
매개 변수 | 형식 | Description |
---|---|---|
t | 형식 | 메서드를 호출할 개체의 유형입니다. |
obj | Object | 사용할 개체 인스턴스입니다. |
Methodname | string | 호출할 메서드의 이름입니다. |
args | 배열 | 메서드의 인수를 포함하는 Object 형식의 배열입니다. |
개체에 대한 생성자를 호출하려면 methodName에 빈 문자열("") 또는 null을 사용합니다.
정적 메서드를 호출하려면 obj에 null을 사용합니다.
비정적 메서드를 호출하려면 모든 인수를 지정합니다.
참고
Null을 Type 인수의 값으로 사용하는 t를 사용하면 Invoke가 ArgumentNullException 예외를 throw합니다. Invoke 메서드는 Type.InvokeMember .NET Framework 메서드를 사용하므로 인수 t는 null이 아니어야 합니다.
솔루션에서 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 셰이프를 변환하는 방식을 보여 줍니다.
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 오케스트레이션 호출에 포함된 이름과 일치하지만 오케스트레이션을 호출할 때 인수는 이름이 아니라 순서를 기준으로 일치됩니다.