Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il motore di messaggistica BizTalk genera riconoscimenti positivi (ACK) e riconoscimenti negativi (NACK) in risposta a condizioni rilevate durante l'elaborazione di un messaggio tramite una porta. BizTalk Server pubblica un riconoscimento positivo per indicare la corretta trasmissione di un messaggio e un riconoscimento negativo per indicare l'errore di trasmissione e la sospensione di un messaggio.
Perché usare i riconoscimenti?
I riconoscimenti positivi e negativi forniscono un feedback forte che è possibile usare per determinare se un messaggio è arrivato alla destinazione o ha riscontrato uno o più problemi lungo la strada. Ad esempio, i riconoscimenti sono utili quando:
Si vuole monitorare una porta di ricezione per un nuovo partner commerciale per la convalida dello schema e altri errori.
Si vuole contrassegnare lo stato di una richiesta di prestito inviata per l'approvazione come "in corso" se viene inviata correttamente a un partner per l'approvazione o "non riuscita" se la trasmissione ha esito negativo (ad esempio, se il server del partner è inattivo).
Si elaborano interscambi contenenti più ordini di acquisto e si vuole tenere traccia del numero di ordini trasmessi o di trasmissione non riuscita.
È possibile eseguire ognuno di questi scenari usando riconoscimenti e routing basato sul contenuto che usa filtri.
Riconoscimenti di routing
Quando viene pubblicato un controllo ACK o NACK, tutte le proprietà del contesto del messaggio che ha causato l'ACK/NACK vengono ridotte di livello. Le proprietà promosse non vengono trasferite alla conferma. Per instradare un riconoscimento, creare un filtro utilizzando le seguenti proprietà dello spazio dei nomi BTS :
| Nome della proprietà | Tipo di dati | Descrizione |
|---|---|---|
| BTS. AckFailureCategory | xs:int | Identifica ErrorCategory, che fornisce la posizione e il motivo della sospensione. |
| BTS.AckFailureCode | xs:string | Identifica ErrorCode, che fornisce la posizione e il motivo della sospensione. |
| BTS.AckType | xs:string | Il valore è ACK per un riconoscimento positivo e NACK per un riconoscimento negativo. |
| BTS.AckID | xs:string | Identifica l'ID messaggio del messaggio originale. |
| BTS.AckOwnerID | xs:string | Identifica l'ID istanza dal messaggio originale. |
| BTS. CorrelationToken | xs:string | Identifica il token di correlazione dal messaggio originale, se presente. |
| BTS.AckDescrizione | xs:string | Identifica errorDescription, che fornisce la posizione e il motivo della sospensione. |
| BTS.AckSendPortID | xs:string | Identifica SendPortID dal messaggio originale. |
| BTS.AckSendPortName | xs:string | Identifica SendPortName dal messaggio originale. |
| BTS. AckOutboundTransportLocation | xs:string | Identifica OutboundTransportLocation dal messaggio originale. |
| BTS.AckReceivePortID | xs:string | Identifica ReceivePortID dal messaggio originale. |
| BTS. AckReceivePortName | xs:string | Identifica ReceivePortName dal messaggio originale. |
| BTS. AckInboundTransportLocation | xs:string | Identifica InboundTransportLocation dal messaggio originale. |
Annotazioni
Le proprietà che contengono informazioni sugli errori non sono presenti negli ACKs perché segnalano una consegna positiva.
Corpo del messaggio di riconoscimento negativo
Gran parte delle informazioni importanti su un riconoscimento positivo o negativo è contenuta nelle proprietà del contesto. Oltre alle proprietà di contesto, i NACK contengono anche una parte del corpo del messaggio contenente un errore SOAP. Il formato dell'errore SOAP è il seguente:
<?xml version="1.0" encoding="utf-8"?>
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP:Body>
<SOAP:Fault>
<faultcode>Microsoft BizTalk Server Negative Acknowledgment </faultcode>
<faultstring>An error occurred while processing the message, refer to the details section for more information </faultstring>
<faultactor>C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml</faultactor>
<detail>
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">
<NAckID>{FFB1A60B-E593-4620-8897-4E9C7030A937}</NAckID>
<ErrorCode>0xc0c01658</ErrorCode>
<ErrorCategory>0</ErrorCategory>
<ErrorDescription>There was a failure executing the send pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML assembler" Send Port: "Failed Message" URI: "C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml" Reason: This Assembler cannot retrieve a document specification using this type: "http://Sample#Unknown". </ErrorDescription>
</ns0:NACK>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
Il messaggio di eccezione generato dall'adapter si trova nella sezione Soap Detail dell'elemento ErrorDescription.
Accedere al corpo del messaggio da un'orchestrazione
Se hai una porta di orchestrazione che richiede la notifica di consegna, l'eccezione DeliveryFailureException generata in caso di errore di trasmissione viene deserializzata dall'errore SOAP presente nel corpo del messaggio NACK. Per accedere alla stringa del messaggio di eccezione dall'interno dell'orchestrazione, eseguire il cast di DeliveryFailureException a soapException e quindi accedere a InnerXml, come illustrato nel codice seguente:
// Cast the DeliveryFailureException to a SoapException…
System.Web.Services.Protocols.SoapException se = (System.Web.Services.Protocols.SoapException)e.InnerException;
System.Diagnostics.Trace.WriteLine(se.Detail.InnerXml);
//e is an Microsoft.XLANGs.BaseTypes.DeliveryFailureException
//object type created in an Exception handler
L'esempio di codice precedente restituisce un frammento XML simile al seguente:
<?xml version="1.0" encoding="utf-8"?>
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">
<NAckID>{FFB1A60B-E593-4620-8897-4E9C7030A937}</NAckID>
<ErrorCode>0xc0c01658</ErrorCode>
<ErrorCategory>0</ErrorCategory>
<ErrorDescription>There was a failure executing the send pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML assembler" Send Port: "Failed Message" URI: "C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml" Reason: This Assembler cannot retrieve a document specification using this type: "http://Sample#Unknown".</ErrorDescription>
</ns0:NACK>
Quando viene pubblicato un riconoscimento?
Entrambi i riconoscimenti positivi (ACK) e negativi (NACK) vengono pubblicati nel database MessageBox al momento dell'errore a condizione che esista almeno un abbonamento corrispondente. Ad esempio, se BizTalk Server non riesce a trovare uno schema corrispondente per un messaggio letto da una porta di ricezione e non sono presenti sottoscrizioni NACK, sospende il messaggio (se il routing dei messaggi non riuscito non è stato abilitato) e non pubblica un NACK
Vedere anche
gestione degli errori
Utilizzo del routing dei messaggi falliti