CREATE SERVICE (Transact-SQL)
Erstellt einen neuen Dienst. Bei einem Service Broker-Dienst handelt es sich um einen Namen für einen bestimmten Task oder eine Gruppe von Tasks. Service Broker verwendet den Namen des Diensts zum Weiterleiten von Nachrichten, zum Übermitteln von Nachrichten an die richtige Warteschlange innerhalb einer Datenbank und zum Erzwingen des Vertrags für eine Konversation.
Ein Dienst macht die Funktionalität verfügbar, die von den Verträgen bereitgestellt wird, denen er zugeordnet ist, sodass sie von anderen Diensten verwendet werden können. Die CREATE SERVICE-Anweisung gibt die Verträge an, deren Ziel dieser Dienst ist. Ein Dienst kann nur ein Ziel für Konversationen sein, die die von dem Dienst angegebenen Verträge verwenden. Ein Dienst, der keine Verträge angibt, macht keine Funktionalität für andere Dienste verfügbar.
Konversationen, die von diesem Dienst initiiert werden, können einen beliebigen Vertrag verwenden. Sie erstellen einen Dienst ohne Angabe von Verträgen, wenn der Dienst nur Konversationen initiiert.
Wenn Service Broker eine neue Konversation von einem Remotedienst annimmt, bestimmt der Name des Zieldiensts die Warteschlange, in der der Broker Nachrichten in der Konversation anordnet.
Die Berechtigung zum Erstellen eines Diensts liegt standardmäßig bei Mitgliedern der festen Datenbankrollen db_ddladmin und db_owner sowie der festen Serverrolle sysadmin. Der Benutzer, der die CREATE SERVICE-Anweisung ausführt, muss über die REFERENCES-Berechtigung für die Warteschlange und alle angegebenen Verträge verfügen.
Die REFERENCES-Berechtigung für einen Dienst liegt standardmäßig beim Besitzer des Diensts, bei Mitgliedern der festen Datenbankrollen db_ddladmin und db_owner sowie bei Mitgliedern der festen Serverrolle sysadmin. SEND-Berechtigungen für einen Dienst liegen standardmäßig beim Besitzer des Diensts, bei Mitgliedern der festen Datenbankrolle db_owner und bei Mitgliedern der festen Serverrolle sysadmin.
Ein Dienst kann kein temporäres Objekt sein. Dienstnamen, die mit # beginnen, sind zulässig. Hierbei handelt es sich jedoch um dauerhafte Objekte.
A. Erstellen eines Diensts mit einem Vertrag
Im folgenden Beispiel wird der Dienst //Adventure-Works.com/Expenses in der ExpenseQueue-Warteschlange im dbo-Schema erstellt. Dialoge, die diesen Dienst zum Ziel haben, müssen dem Vertrag //Adventure-Works.com/Expenses/ExpenseSubmission entsprechen.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. Erstellen eines Diensts mit mehreren Verträgen
Im folgenden Beispiel wird der Dienst //Adventure-Works.com/Expenses für die ExpenseQueue-Warteschlange erstellt. Dialoge, die diesen Dienst zum Ziel haben, müssen entweder dem Vertrag //Adventure-Works.com/Expenses/ExpenseSubmission oder dem Vertrag //Adventure-Works.com/Expenses/ExpenseProcessing entsprechen.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
C. Erstellen eines Diensts ohne Verträge
Im folgenden Beispiel wird der Dienst //Adventure-Works.com/Expenses on the ExpenseQueue erstellt. Dieser Dienst verfügt über keine Vertragsinformationen. Daher kann der Dienst nur der Initiator eines Dialogs sein.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;