Freigeben über


Verwenden von Bestätigungen

Die BizTalk-Messaging-Engine generiert positive und negative Bestätigungen beim Auftreten von Fehlern, die beim Verarbeiten einer Nachricht über einen Port festgestellt werden. BizTalk Server veröffentlicht eine positive Bestätigung, um die erfolgreiche Übertragung einer Nachricht anzugeben, und eine negative Bestätigung, wenn bei der Übertragung ein Fehler aufgetreten ist und eine Nachricht angehalten wurde.

Gründe für die Verwendung von Bestätigungen

Positive und negative Bestätigungen liefern Ihnen wichtige Rückmeldungen dazu, ob eine Nachricht an ihrem Ziel angekommen ist, oder ob während dieses Vorgangs Fehler aufgetreten sind. Bestätigungen sind beispielsweise in folgenden Fällen hilfreich:

  • Sie möchten einen Empfangsport für einen neuen Handelspartner auf Fehler bei der Schemaüberprüfung und andere Fehler überwachen.

  • Sie möchten den Status einer zur Genehmigung versendeten Kreditanfrage als "In Bearbeitung" kennzeichnen, wenn sie erfolgreich an einen Partner zur Genehmigung gesendet wurde, oder als "Fehlgeschlagen", wenn bei der Übertragung Fehler aufgetreten sind (z. B. wenn der Server des Partners ausgefallen ist).

  • Sie verarbeiten Austauschvorgänge, die mehrere Bestellungen enthalten, und möchten die Anzahl der Bestellungen überwachen, die übertragen wurden bzw. bei deren Übertragung Fehler aufgetreten sind.

    Für jedes dieser Szenarien können Sie Bestätigungen und inhaltsbasiertes Routing mit Filtern verwenden.

Routingbestätigungen

Wenn eine positive oder negative Bestätigung veröffentlicht wird, werden alle Nachrichtenkontexteigenschaften aus der Nachricht herabgestuft, die für die Bestätigung verantwortlich sind. Eigenschaften, die höher gestuft wurden, haben keinen Einfluss auf die Bestätigung. Um eine Bestätigung weiterzuleiten, erstellen Sie einen Filter mit den folgenden Eigenschaften aus dem BTS-Namespace :

Eigenschaftenname Datentyp BESCHREIBUNG
BTS.AckFailureCategory xs:int Gibt die ErrorCategory an, die den Ort und den Grund für die Unterbrechung angibt.
BTS.AckFailureCode xs:string Identifiziert den ErrorCode, der den Ort und den Grund für die Unterbrechung angibt.
BTS.AckType xs:string Der Wert lautet ACK für eine positive Bestätigung und NACK für eine negative Bestätigung.
BTS.AckID xs:string Gibt die MessageID der ursprünglichen Nachricht an.
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, sofern vorhanden.
BTS.AckDescription xs:string Gibt die ErrorDescription an, die den Ort und den Grund für die Unterbrechung 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-Wert 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 mit Fehlerinformationen sind in positiven Bestätigungen nicht vorhanden, da diese eine erfolgreiche Übermittlung signalisieren.

Text einer negativen Bestätigungsmeldung

Die meisten wichtigen Informationen zu einer positiven oder negativen Bestätigung sind in den Kontexteigenschaften enthalten. Negative Bestätigungen enthalten neben den Kontexteigenschaften einen Meldungstextteil mit einem SOAP-Fehler. Der SOAP-Fehler weist folgendes Format auf:

<?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 Element "ErrorDescription" im Abschnitt "SOAP-Detail".

Zugreifen auf den Meldungstext aus einer Orchestrierung

Wenn Sie über einen Orchestrierungsport verfügen, der eine Übermittlungsbenachrichtigung erfordert, wird das durch einen Übertragungsfehler ausgelöste Element DeliveryFailureException aus dem SOAP-Fehler deserialisiert, der im Text der negativen Bestätigungsmeldung enthalten ist. Um in der Orchestrierung auf die in der Ausnahmemeldung enthaltene Zeichenfolge zuzugreifen, müssen Sie die Ausnahme vom Typ DeliveryFailureException in eine Ausnahme vom Typ SoapException umwandeln und dann auf InnerXml zugreifen, wie im folgenden Code beschrieben:

// 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  

Das oben genannte Codebeispiel gibt ein XML-Fragment zurück, das dem folgenden Fragment ä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 als auch negative Bestätigungen werden in der MessageBox-Datenbank zum Zeitpunkt des Fehlers veröffentlicht, sofern mindestens ein entsprechendes Abonnement vorhanden ist. Wenn BizTalk Server beispielsweise kein entsprechendes Schema für eine von einem Empfangsport empfangene Nachricht findet und keine Abonnements für negative Bestätigungen vorhanden sind, wird die Nachricht angehalten (wenn das Weiterleiten fehlerhafter Nachrichten nicht aktiviert wurde) und keine negative Bestätigung veröffentlicht.

Weitere Informationen

Fehlerbehandlung
Verwenden des Routings für fehlerhafte Nachrichten