Operaciones del adaptador de envío
Los adaptadores de envío pueden realizar las siguientes operaciones:
Resubmit: void Resubmit(IBaseMessage msg, DateTime timeStamp). Cuando se produce un error de transmisión en un mensaje, un adaptador lo reenvía cuando sea conveniente. La llamada a este elemento se efectúa por cada uno de los mensajes. Si un lote de mensajes se envió sin éxito, el adaptador debe determinar los mensajes que provocan el error y volver a enviar los que no provocaron que el lote produzca un error en llamadas independientes a Resubmit. Hay información al final de este tema sobre cómo conservar los valores de propiedad de contexto de mensaje al llamar a Resubmit.
Vaya a Transporte siguiente: void MoveToNextTransport(IBaseMessage msg). Si se producen errores en un mensaje durante la operación de envío y se han agotado los reintentos, el adaptador puede enviar el mensaje al siguiente transporte que se ha configurado para la retransmisión.
Suspend: void MoveToSuspendQ(IBaseMessage msg). Si no se ha configurado un transporte de reserva adicional, el adaptador mueve un mensaje de envío con errores a la cola de suspensión. Hay información al final de este tema sobre cómo conservar los valores de propiedad del contexto del mensaje al llamar a Suspend.
Delete: void DeleteMessage(IBaseMessage msg). El adaptador elimina un mensaje después de que BizTalk Server le haya notificado que la transmisión se ha realizado de forma correcta. Al eliminar un mensaje se le comunica a BizTalk Server que el adaptador ha finalizado con el mensaje. Por lo general, la operación SubmitResponse se realiza en el mismo lote que su operación de eliminación asociada.
Enviar respuesta: void SubmitResponseMessage(IBaseMessage solicitMsgSent, IBaseMessage responseMsgToSubmit). El adaptador envía una respuesta al lote que se va a enviar de vuelta a BizTalk Server. Esta operación incluye en la llamada el mensaje original junto con la respuesta para que BizTalk Server pueda correlacionarlas.
Cancelar respuesta: void CancelResponseMessages(string correlationToken). Si es necesario cancelar el envío de un mensaje de respuesta antes de enviar el lote, se usa el método CancelResponseMessages , pasando el token de correlación para que se elimine el mensaje de respuesta asociado.
Al llamar a Reenviar o Suspender en un mensaje, es posible que desee conservar los valores de determinadas propiedades de contexto de mensaje. Puede hacerlo si guarda los valores de propiedad en formato XML. Cuando se reenvía o se suspende el mensaje, las propiedades correspondientes permanecen disponibles en el contexto del mensaje.
La siguiente cadena XML describe el formato en el que se almacena la información:
<PropertiesToUpdate>
<Property name="StringProperty" nameSpace="http://MyNamespace1" vt="8">SomeString</Property>
<Property name="IntProperty" nameSpace="http://schemas.microsoft.com/BizTalk/2005/test-properties" vt="3">4</Property>
<Property name="BoolProperty" nameSpace="http://schemas.microsoft.com/BizTalk/2005/test-properties" vt="11">0</Property>
</PropertiesToUpdate>
El código que aparece a continuación es el que genera la cadena XML:
private string GetPropsToUpdateXml(int nextRetryAttempt)
{
string result = "<PropertiesToUpdate><Property name=\"RetryAttempts\" nameSpace=\"http://schemas.microsoft.com/BizTalk/2005/test-properties\" vt=\"3\">" + nextRetryAttempt.ToString() + "</Property></PropertiesToUpdate>";
return result;
}
A continuación, la cadena se guarda en el contexto del mensaje utilizando el siguiente código:
Message.Context.Write("PropertiesToUpdate", "http://schemas.microsoft.com/BizTalk/2003/system-properties", GetPropsToUpdateXml(++retryAttempt));
Cuando se reenvía el mensaje, el adaptador puede leer esta propiedad utilizando la siguiente línea de código:
propValue = inmsg.Context.Read("RetryAttempts", "http://schemas.microsoft.com/BizTalk/2005/test-properties");