Beenden und Starten von Service Broker-Anwendungen

Manchmal kann es notwendig sein, eine Service Broker-Anwendung vorübergehend zu beenden. So könnten Sie z. B. eine ausgelastete Anwendung beenden, um eine aktualisierte Version der gespeicherten Aktivierungsprozedur für die Warteschlange zu installieren. Obwohl Sie die Warteschlange ändern können, ohne die Anwendung zu beenden, kann es sein, dass die gerade ausgeführten Versionen der gespeicherten Aktivierungsprozedur immer genügend Nachrichten zum Verarbeiten haben und deshalb nie beendet werden. In diesem Fall würde das Beenden der Warteschlange zum sofortigen Beenden der gespeicherten Aktivierungsprozedur führen. Wenn Sie den Dienst erneut starten, startet Service Broker die aktualisierte gespeicherte Aktivierungsprozedur.

Die Informationen in diesem Abschnitt beziehen sich auf das vorübergehende Beenden einer Anwendung zu Wartungszwecken. Informationen zum dauerhaften Entfernen eines Diensts aus der Datenbank finden Sie unter Deinstallieren von Service Broker-Anwendungen.

Um einen Dienst vorübergehend zu beenden, deaktivieren Sie die von der Anwendung verwendete Warteschlange. Wenn sie deaktiviert ist, ist die Warteschlange für Empfangsvorgänge nicht verfügbar, wodurch die Anwendung effektiv beendet wird. Service Broker übermittelt neue Nachrichten nicht mehr an diese Warteschlange und ermöglicht es Anwendungen nicht mehr, Nachrichten aus der Warteschlange zu empfangen. Wenn eine Anwendung versucht, Nachrichten aus einer nicht verfügbaren Warteschlange zu empfangen, empfängt die Anwendung einen Transact-SQL-Fehler. Eine Anwendung kann für eine Konversation jederzeit END CONVERSATION aufrufen, unabhängig davon, ob die von der Konversation verwendete Warteschlange verfügbar ist. Service Broker übermittelt die Nachricht "Dialog beenden" jedoch erst dann an den Remotedienst, wenn die Warteschlange verfügbar wird.

Wenn für eine beendete Warteschlange eine Nachricht empfangen wird, bewahrt Service Broker die Nachricht so lange in der Übertragungswarteschlange für die Datenbank auf, bis die Zielwarteschlange verfügbar wird. Service Broker betrachtet eine für eine beendete Warteschlange eingehende Nachricht nicht als Fehler und benachrichtigt den Absender nicht. Wenn die Warteschlange verfügbar wird, übermittelt Service Broker die Nachrichten in der Übertragungswarteschlange an die Dienstwarteschlange. Diese Übermittlungsmethode verwendet die normale Wiederholungslogik für Nachrichten. Nachrichten werden in der Übertragungswarteschlange als verzögert gekennzeichnet. Die Wiederholung erfolgt in regelmäßigen Abständen. Service Broker bewahrt die Nachricht in der Übertragungswarteschlange auf und verzögert die Nachricht unabhängig davon, ob die Nachricht aus derselben Instanz wie die Warteschlange oder aus dem Netzwerk stammt.

Das Beenden einer Warteschlange setzt den Konversationszeitgeber oder den Zeitgeber für die Dialoglebensdauer nicht zurück. Wenn einer der beiden Zeitgeber abläuft, während die Warteschlange beendet ist, generiert Service Broker die entsprechenden Nachrichten, wenn die Warteschlange wieder gestartet wird.

Um die Anwendung erneut zu starten, aktivieren Sie die Warteschlange, die die Anwendung verwendet. Dadurch wird die Warteschlange gestartet. Wenn in der Warteschlange eine gespeicherte Aktivierungsprozedur angegeben ist und die Warteschlange Nachrichten enthält, startet Service Broker die gespeicherte Aktivierungsprozedur, sobald die Warteschlange startet. Da die Warteschlange nun verfügbar ist, generiert Service Broker auch Nachrichten für Konversationszeitgeber und Dialoglebensdauer-Zeitgeber, die abgelaufen sind, als die Warteschlange beendet war. Bei einer Anwendung, die keine Aktivierung verwendet, starten Sie die Anwendung erneut mithilfe der für diese Anwendung definierten Startprozedur.