Erstellen von Anwendungen mit Service Broker

Jedes Programm, das Transact-SQL-Anweisungen ausführen kann, kann Service Broker verwenden. Eine Service Broker-Anwendung kann als Programm implementiert werden, das außerhalb von SQL Server ausgeführt wird, oder als eine gespeicherte Prozedur, die in Transact-SQL oder einer .NET-Sprache geschrieben ist.

Ein Programm, das Service Broker verwendet, besteht in der Regel aus einer Vielzahl von Komponenten, die zusammenwirken, um eine Aufgabe durchzuführen. Ein Programm, das eine Konversation initiiert, erstellt und sendet eine Nachricht an einen anderen Dienst. Dieses Programm wartet möglicherweise auf eine Antwort oder wird unmittelbar beendet und verlässt sich auf ein anderes Programm, das die Antwort verarbeitet. Im Falle eines Diensts, der das Ziel einer Konversation darstellt, empfängt das Programm eine eingehende Nachricht von der Warteschlange des Diensts, liest die Nachrichtendaten, führt alle erforderlichen Verarbeitungsschritte aus und erstellt und sendet dann ggf. eine Antwortnachricht.

Service Broker bietet eine Erweiterung von Transact-SQL. Eine Anwendung benötigt kein besonderes Objektmodell und keine besondere Bibliothek, um mit Service Broker zusammenzuarbeiten. Stattdessen senden die Programme Transact-SQL-Befehle an SQL Server und verarbeiten die Ergebnisse dieser Befehle. Eine Anwendung kann von Service Broker aktiviert, als Hintergrunddienst und als geplanter Auftrag ausgeführt oder als Antwort auf ein Ereignis gestartet werden. Weitere Informationen zu den Strategien zum Starten einer Anwendung, die Service Broker verwendet, finden Sie unter Auswählen einer Startstrategie.

Weitere Informationen zum Erstellen von Anwendungen mit Service Broker finden Sie unter Vorteile der Programmierung mit Service Broker.

Service Broker-Anwendungsübersicht

Die folgende Abbildung stellt die Interaktion in einer Anwendung dar, die Service Broker verwendet:

Beziehung und Nachrichtenfluss in Konversationen

Wie in der Abbildung dargestellt, werden die Nachrichtentypen SubmitExpense, AcceptDenyExpense und ReimbursementIssued zuerst erstellt. Der ProcessExpenses-Vertrag wird basierend auf den Nachrichtentypen erstellt und bietet ein Schema für eine Konversation zum Durchführen einer Ausgabenrückerstattungsaufgabe. Der ProcessExpenses-Vertrag steuert alle Konversationen zwischen dem ProcessExpense-Dienst und dem SubmitExpense-Dienst. Der ProcessExpenses-Vertrag und die von ihm verwendeten Nachrichtentypen müssen in den Datenbanken aller Dienste vorhanden sein, die Konversationen basierend auf diesem Vertrag führen.

Service Broker speichert Nachrichten, die an den SubmitExpense-Dienst in der Warteschlange für diesen Dienst gesendet werden. Die gespeicherte Prozedur ExpenseSubmission empfängt Nachrichten von dieser Warteschlange, verarbeitet diese und sendet sie an einen anderen Dienst, falls eine Antwort erforderlich ist.

Service Broker speichert Nachrichten, die an den ProcessExpense-Dienst in der Warteschlange für diesen Dienst gesendet werden. Die gespeicherte Prozedur ExpenseProcessing empfängt Nachrichten von dieser Warteschlange, verarbeitet diese und sendet sie an einen anderen Dienst, falls eine Antwort erforderlich ist.

Eine Konversation zwischen diesen beiden Diensten wäre wie folgt strukturiert:

  • Ein Benutzer übermittelt eine Ausgabenrückerstattungsanforderung über eine Benutzeroberfläche. Die Anwendung führt die gespeicherte Prozedur ExpenseSubmission aus, die eine SubmitExpense-Nachricht erstellt. Der SubmitExpense-Dienst startet eine Konversation mit dem ProcessExpense-Dienst und sendet dann die SubmitExpense-Nachricht an den ProcessExpense-Dienst.

  • Service Broker empfängt die SubmitExpense-Nachricht für den ProcessExpense-Dienst und stellt die Nachricht in die ExpenseQueue-Warteschlange. Die ExpenseQueue-Warteschlange aktiviert die gespeicherte ProcessExpense-Prozedur, die die SubmitExpense-Nachricht aus der Warteschlange entfernt und verarbeitet. Die gespeicherte Prozedur ProcessExpense erstellt dann eine AcceptDenyExpense-Nachricht und sendet diese Nachricht an den SubmitExpense-Dienst. Wenn die Ausgaben jedoch verweigert werden, beendet die gespeicherte Prozedur ProcessExpense die Konversation.

  • Service Broker stellt die AcceptDenyExpense-Nachricht für den SubmitExpense-Dienst in die Warteschlange für den Dienst. Falls die Konversation durch die ProcessExpense-Prozedur beendet wurde, stellt Service Broker eine EndDialog-Nachricht in die Expenses-Warteschlange. Die Warteschlange aktiviert die gespeicherte Prozedur ExpenseSubmission, die die AcceptDenyExpense-Nachricht aus der Warteschlange entfernt und verarbeitet. Falls die gespeicherte Prozedur ExpenseSubmission eine EndDialog-Nachricht in der Warteschlange findet, beendet die Prozedur die Konversation.

  • Wenn die Ausgaben akzeptiert werden, erstellt und sendet der ProcessExpense-Dienst eine ReimbursementIssued-Nachricht mit der Bestätigung, dass die Ausgabenzahlung erfolgte, und beendet dann die Konversation. Service Broker stellt die Nachrichten in die Warteschlange für den Dienst. Die Warteschlange aktiviert die ExpenseSubmission-Prozedur, und die Prozedur verarbeitet die ReimbursementIssued-Nachricht. Die Prozedur verarbeitet dann die EndDialog-Nachricht und beendet die Konversation.