Brokersystemmeldungen

Service Broker verwendet drei Systemnachrichtentypen, um Status- und Fehlerinformationen von Service Broker zu übermitteln.

Verarbeiten von Systemnachrichten

Die meisten der Nachrichten in einer Service Broker-Konversation sind die anwendungsdefinierten Nachrichten, die verwendet werden, um zwischen Diensten zu kommunizieren. Jede Nachricht muss einem von einer CREATE MESSAGE TYPE-Anweisung definierten Nachrichtentypformat entsprechen. Der in einer Konversation zulässige Satz Nachrichtentypen wird durch den in der BEGIN DIALOG CONVERSATION-Anweisung angegebenen Vertrag definiert.

Zusätzlich zu den im Vertrag angegebenen anwendungsdefinierten Nachrichtentypen kann auch jede Konversation Nachrichten empfangen, die einen von drei systemdefinierten Nachrichtentypen verwenden. Diese Nachrichtentypen werden von Service Broker verwendet, um Fehler und den Status von Dialogen zu melden. Jede Anwendung muss Logik enthalten, um Fehlermeldungen und Nachrichten über das Beenden des Dialogs zu verarbeiten. Wenn die Anwendung einen Konversationszeitgeber für eine Dialogkonversation festlegt, muss die Anwendung Logik enthalten, um Dialogzeitgebernachrichten zu verarbeiten. Service Broker bietet diese Nachrichtentypen jedem Dienst, ob sie nun im Vertrag für den Dienst erscheinen oder nicht. Weitere Informationen finden Sie unter Behandeln von Service Broker-Fehlermeldungen.

Fehlermeldungen

Wenn ein Remotedienst einen Dialog mit einem Fehler beendet oder der lokale Broker einen nicht behebbaren Fehler in einem Dialog erkennt, erstellt der lokale Broker eine Fehlermeldung. Fehlermeldungen weisen den Typ https://schemas.microsoft.com/SQL/ServiceBroker/Error auf. Fehlermeldungen werden als wohlgeformte XML-Elemente überprüft.

Das in einer Fehlermeldung enthaltene XML-Dokument verwendet den Namespace https://schemas.microsoft.com/SQL/ServiceBroker. Das Stammelement des Dokuments besitzt den lokalen Namen Error. Es enthält ein Element mit dem Namen Code und ein Element mit dem Namen Message. Das Element Code enthält einen ganzzahligen Wert. Das Element Message enthält den für den Benutzer lesbaren Text der Meldung.

Beispielsweise könnte eine von einem Ausgabenberichte verarbeitenden Dienst generierte Fehlermeldung folgende XML-Elemente (für bessere Lesbarkeit neu formatiert) enthalten:

<?xml version="1.0"?>
<Error xmlns="https://schemas.microsoft.com/SQL/ServiceBroker">
  <Code>12</Code>
  <Description>
    Unknown cost center "127-1000". Please check the cost center list
    and resubmit the report.
  </Description>
</Error>

Ein Empfangsvorgang empfängt eine Fehlermeldung vor jeder Nachricht für diesen Dialog mit Ausnahme einer Dialogzeitgebernachricht. Dies tritt unabhängig von der Reihenfolge auf, in der die Fehlermeldung in der Warteschlange angekommen ist. Wenn eine Warteschlange sowohl eine Dialogzeitgebernachricht als auch eine Fehlermeldung enthält, wird die Dialogzeitgebernachricht bei einem Empfangsvorgang vor der Fehlermeldung empfangen.

Sobald eine Fehlermeldung für einen Dialog eingeht, löst der Broker einen Fehler aus, wenn von einer Anwendung eine Nachricht in diesem Dialog gesendet wird. Die verbleibenden Nachrichten für den Dialog können jedoch sogar nach dem Eingang einer Fehlermeldung von einer Anwendung empfangen werden.

Nachrichten über das Beenden des Dialogs

Wenn ein Dialog von einer Anwendung ohne Angabe eines Fehlers beendet wird, sendet der lokale Broker eine Nachricht über das Beenden des Dialogs an den Remote-Broker. Diese Nachrichten weisen den Typ https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog auf.

Nachrichten über das Beenden des Dialogs sind leere Nachrichten. Bei einem Empfangsvorgang wird eine Nachricht über das Beenden des Dialogs in der Reihenfolge empfangen, in der die Nachricht in der Warteschlange eingegangen ist.

Dialogzeitgebernachrichten

Dialogzeitgebernachrichten geben an, dass der Konversationszeitgeber für einen Dialog abgelaufen ist. Diese Nachrichten weisen den Nachrichtentyp https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer auf. Ein Konversationszeitgeber ist auf eine Seite der Konversation beschränkt. Service Broker sendet nie eine Dialogzeitgebernachricht an die andere Seite der Konversation.

Dialogzeitgebernachrichten sind leere Nachrichten. Bei einem Empfangsvorgang wird die Dialogzeitgebernachricht vor allen anderen Nachrichten für diesen Dialog empfangen, unabhängig von der Reihenfolge, in der die Timeoutnachricht in der Warteschlange eingegangen ist.