Recaller (objeto)
La solución Administración de procesos empresariales proporciona una forma genérica de reintentar llamar a algunos métodos de objeto con errores. La solución lo hace a través del objeto Recaller en la orquestación ExceptionHandler . La orquestación ExceptionHandler usa el objeto para reintentar las llamadas al método de objeto. Para obtener más información, vea La orquestación ExceptionHandler.
El objeto Recaller tiene un único método estático, Invoke. Dado que es estático, nunca es necesario crear una instancia del objeto Recaller . Puede usar el método Invoke de tres maneras: para construir un objeto, llamar a un método estático para un objeto o llamar a un método no estático para un objeto.
Nota
El método Invoke actúa como contenedor para el método Type.InvokeMember en la biblioteca de clases de .NET Framework.
En la tabla siguiente se describen los argumentos del método Invoke :
Parámetro | Tipo | Descripción |
---|---|---|
t | Tipo | Tipo de objeto en el que se debe llamar el método. |
obj | Object | Instancia del objeto que se va a usar. |
Nombredemétodo | string | Nombre del método que se va a invocar. |
args | Matriz | Matriz de tipo Object que contiene los argumentos del método. |
Para llamar al constructor de un objeto, use una cadena vacía ("") o null para methodName.
Para llamar a un método estático, use null para obj.
Para llamar a un método no estático, proporcione todos los argumentos.
Nota
El uso de null como valor del argumento Type, t, hace que Invoke genere una excepción ArgumentNullException . El argumento t no debe ser null porque el método Invoke usa el método Type.InvokeMember .NET Framework.
En la solución, solo la orquestación ExceptionHandler usa el objeto Recaller . ExceptionHandler es, a su vez, utilizado por otras orquestaciones. Los valores pasados al método Invoke proceden de estas otras orquestaciones. Por ejemplo, el código siguiente aparece en la orquestación Activar en la forma Expresión 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
Observe cómo el código crea una matriz mediante System.Array.CreateInstance y usa el método SetValue para almacenar los valores usados en ella.
Después de la forma Expresión, la orquestación Activate llama a la orquestación ExceptionHandler . En el siguiente código se muestra cómo el Diseñador de orquestaciones traduce la forma de llamada:
call Microsoft.Samples.
BizTalk.SouthridgeVideo.
OrderManager.ExceptionHandlerOrch
(
Reason,
Ex,
CalledObject,
MethodName,
ParameterArray,
OrderCorrelation,
OrderMsg,
out ReturnValue,
ObjectType
);
En la orquestación ExceptionHandler , el código siguiente aparece en la forma Llamar expresión de código original :
ReturnValue =
Microsoft.Samples.
BizTalk.SouthridgeVideo.
Utilities.Recaller.
Invoke(
ObjectType,
CalledObject,
MethodName,
ParameterArray
);
Observe que aunque los nombres de argumento coinciden con los de la llamada de la orquestación Activate, los argumentos coinciden por orden y no por nombre cuando se llaman las orquestaciones.
Aspectos destacados de la implementación de la solución de administración de procesos empresariales
ExceptionHandler (orquestación)