Operazioni degli adapter di trasmissione
Gli adapter di trasmissione possono eseguire le operazioni seguenti:
Resubmit: void Resubmit(IBaseMessage msg, DateTime timeStamp). Se si verifica un errore durante la trasmissione di un messaggio, questo viene inviato nuovamente dall'adapter al momento appropriato. Questo metodo viene applicato a un messaggio per volta. Se un batch di messaggi è stato inviato in modo non riuscito, l'adapter deve determinare i messaggi che causano l'errore e inviare di nuovo quelli che non hanno causato l'esito negativo del batch in chiamate separate a Resubmit. Alla fine di questo argomento sono disponibili informazioni su come mantenere i valori delle proprietà del contesto del messaggio quando si chiama Resubmit.
Passare al trasporto successivo: void MoveToNextTransport(IBaseMessage msg). Se durante un'operazione di trasmissione si verifica un errore in un messaggio e non sono più disponibili ulteriori tentativi, l'adapter può trasmettere nuovamente il messaggio inviandolo al trasporto successivo configurato.
Suspend: void MoveToSuspendQ(IBaseMessage msg). Se non è stato configurato alcun trasporto di backup aggiuntivo, i messaggi per i quali durante l'invio si è verificato un errore vengono spostati dall'adapter nella coda degli elementi sospesi. Alla fine di questo argomento sono disponibili informazioni su come mantenere i valori delle proprietà del contesto del messaggio quando si chiama Suspend.
Delete: void DeleteMessage(IBaseMessage msg). Questo metodo consente all'adapter di eliminare un messaggio dopo aver ricevuto da BizTalk Server la conferma riguardo la corretta trasmissione di tale messaggio. Quando si elimina un messaggio si segnala a BizTalk Server che l'adapter ha concluso l'elaborazione del messaggio. In genere l'operazione SubmitResponse viene eseguita nello stesso batch dell'operazione delete associata.
Invia risposta: void SubmitResponseMessage(IBaseMessage solicitMsgSent, IBaseMessage responseMsgToSubmit). Questo metodo consente all'adapter di inviare una risposta al batch da trasmettere a BizTalk Server. Questa operazione comprende sia il messaggio originale fornito nella chiamata sia la risposta, in modo da consentire a BizTalk Server di stabilire una correlazione fra questi elementi.
Cancel Response: void CancelResponseMessages(string correlationToken). Se l'invio di un messaggio di risposta deve essere annullato prima dell'invio del batch, viene utilizzato il metodo CancelResponseMessages , passando il token di correlazione per il messaggio di risposta associato da eliminare.
Quando si chiama Resubmit o Suspend su un messaggio, è possibile conservare i valori di determinate proprietà del contesto del messaggio. A tale fine è possibile salvare i valori delle proprietà in formato XML. Quando il messaggio viene inviato nuovamente o sospeso, le proprietà corrispondenti restano disponibili nel contesto del messaggio.
Nella stringa XML riportata di seguito viene descritto il formato di archiviazione delle informazioni:
<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>
La stringa XML è generata dal codice seguente:
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;
}
Quindi, questa stringa viene salvata nel contesto del messaggio tramite il codice seguente:
Message.Context.Write("PropertiesToUpdate", "http://schemas.microsoft.com/BizTalk/2003/system-properties", GetPropsToUpdateXml(++retryAttempt));
Quando il messaggio viene inviato nuovamente, l'adapter può leggere questa proprietà utilizzando la riga di codice seguente:
propValue = inmsg.Context.Read("RetryAttempts", "http://schemas.microsoft.com/BizTalk/2005/test-properties");