Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das BizTalk Messaging-Modul generiert positive Bestätigungen (ACK) und negative Bestätigungen (NACK) als Reaktion auf Bedingungen, die während der Verarbeitung einer Nachricht über einen Port aufgetreten sind. BizTalk Server veröffentlicht eine positive Bestätigung, um eine erfolgreiche Übertragung einer Nachricht anzuzeigen. Eine negative Bestätigung wird veröffentlicht, um Übertragungsfehler und die Suspendierung einer Nachricht zu kennzeichnen.
Warum Bestätigungen verwenden?
Positive und negative Bestätigungen bieten ein starkes Feedback, mit dem Sie feststellen können, ob eine Nachricht ihr Ziel erreicht hat oder unterwegs auf ein oder mehrere Probleme gestoßen ist. Beispielsweise sind Bestätigungen hilfreich, wenn:
Sie möchten einen Empfangsport für einen neuen Handelspartner für die Schemaüberprüfung und andere Fehler überwachen.
Sie möchten den Status einer Darlehensanforderung, die zur Genehmigung gesendet wurde, als "in Bearbeitung" kennzeichnen, wenn sie erfolgreich an einen Partner zur Genehmigung gesendet wird, oder "fehlgeschlagen", wenn die Übertragung fehlschlägt (z. B. wenn der Server des Partners nicht mehr vorhanden ist).
Sie verarbeiten Austauschvorgänge, die mehrere Bestellungen enthalten, und möchten die Anzahl der Bestellungen nachverfolgen, die erfolgreich übertragen oder nicht übertragen werden.
Sie können jedes dieser Szenarien erreichen, indem Sie Bestätigungen und inhaltsbasiertes Routing verwenden, das Filter verwendet.
Routingbestätigungen
Wenn ein ACK oder NACK veröffentlicht wird, werden alle Nachrichtenkontexteigenschaften aus der Nachricht, die das ACK/NACK verursacht hat, zurückgesetzt. Alle beförderten Eigenschaften gehen nicht in die Bestätigung ein. Um eine Bestätigung weiterzuleiten, erstellen Sie einen Filter mithilfe der folgenden Eigenschaften aus dem BTS-Namespace :
| Eigenschaftsname | Datentyp | BESCHREIBUNG |
|---|---|---|
| BTS. AckFailureCategory | xs:int | Identifiziert die ErrorCategory, die den Ort und Grund für die Aussetzung angibt. |
| BTS.AckFailureCode | xs:string | Identifiziert den ErrorCode, der den Ort und den Grund für die Sperrung angibt. |
| BTS.AckType | xs:string | Der Wert ist ACK für eine positive Bestätigung und NACK für eine negative Bestätigung. |
| BTS AckID | xs:string | Identifiziert die MessageID der ursprünglichen Nachricht. |
| BTS.AckOwnerID | xs:string | Identifiziert die Instanz-ID aus der ursprünglichen Nachricht. |
| BTS. CorrelationToken | xs:string | Identifiziert das Korrelationstoken aus der ursprünglichen Nachricht, falls vorhanden. |
| BTS. AckDescription | xs:string | Identifiziert die Fehlerbeschreibung, die den Ort und den Grund für die Aussetzung angibt. |
| BTS.AckSendPortID | xs:string | Identifiziert die SendPortID aus der ursprünglichen Nachricht. |
| BTS.AckSendPortName | xs:string | Identifiziert den SendPortName aus der ursprünglichen Nachricht. |
| BTS. AckOutboundTransportLocation | xs:string | Identifiziert den OutboundTransportLocation aus der ursprünglichen Nachricht. |
| BTS.AckReceivePortID | xs:string | Identifiziert die ReceivePortID aus der ursprünglichen Nachricht. |
| BTS. AckReceivePortName | xs:string | Identifiziert den ReceivePortName aus der ursprünglichen Nachricht. |
| BTS. AckInboundTransportLocation | xs:string | Identifiziert den InboundTransportLocation aus der ursprünglichen Nachricht. |
Hinweis
Die Eigenschaften, die Fehlerinformationen enthalten, sind in ACKs nicht vorhanden, da sie eine positive Übermittlung signalisieren.
Nachrichtentext für negative Bestätigung
Viele der wichtigen Informationen zu einer positiven oder negativen Bestätigung sind in den Kontexteigenschaften enthalten. Neben den Kontexteigenschaften enthalten NACKs auch einen Nachrichtentextteil, der einen SOAP-Fehler enthält. Das Format des SOAP-Fehlers lautet wie folgt:
<?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>
Die vom Adapter ausgelöste Ausnahmemeldung befindet sich im SOAP-Detailabschnitt im ErrorDescription-Element.
Zugreifen auf den Nachrichtentext aus einer Orchestrierung
Wenn Sie über einen Orchestrierungsport verfügen, der eine Übermittlungsbenachrichtigung erfordert, wird die DeliveryFailureException, die bei einem Übertragungsfehler ausgelöst wird, vom SOAP-Fehler deserialisiert, der im NACK-Nachrichtentext enthalten ist. Um innerhalb Ihrer Orchestrierung auf die Ausnahmemeldungszeichenfolge zuzugreifen, wandeln Sie die DeliveryFailureException in eine SoapException um, und greifen Sie dann wie im folgenden Code gezeigt auf das InnerXml-Element zu.
// 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
Im vorherigen Codebeispiel wird ein XML-Fragment zurückgegeben, das den folgenden ähnelt:
<?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>
Wann wird eine Bestätigung veröffentlicht?
Sowohl positive (ACK) als auch negative (NACK)-Bestätigungen werden an der MessageBox-Datenbank an dem Fehlerpunkt veröffentlicht, sofern mindestens ein übereinstimmender Abonnement vorhanden ist. Wenn BizTalk Server z. B. kein passendes Schema für eine Nachricht finden kann, die von einem Empfangsport gelesen wurde und keine NACK-Abonnements vorhanden sind, wird die Nachricht angehalten (wenn das Routing fehlgeschlagener Nachrichten nicht aktiviert wurde) und kein NACK veröffentlicht.
Siehe auch
Fehlerbehandlung
Verwendung des Routings für fehlgeschlagene Nachrichten