CREATE SERVICE (Transact-SQL)
Crée un nouveau service. Un service Service Broker est un nom pour une tâche ou un ensemble de tâches spécifiques. Service Broker utilise le nom du service pour acheminer les messages, les remettre à la file d'attente appropriée dans une base de données et appliquer le contrat pour une conversation.
Conventions de la syntaxe Transact-SQL
Syntaxe
CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name | [DEFAULT][ ,...n ] ) ]
[ ; ]
Arguments
service_name
Nom du service à créer. Un nouveau service est créé dans la base de données active et il appartient au principal spécifié dans la clause AUTHORIZATION. Les noms du serveur, de la base de données et du schéma ne peuvent pas être spécifiés. L'argument service_name doit être d'un type sysname valide.[!REMARQUE]
Ne créez pas de service qui utilise le mot clé ANY pour service_name. Lorsque vous spécifiez ANY pour un nom de service dans CREATE BROKER PRIORITY, la priorité est considérée pour tous les services. Elle n'est pas limitée à un service dont le nom est ANY.
AUTHORIZATION owner_name
Définit le propriétaire du service comme étant l'utilisateur ou le rôle de la base de données spécifié. Lorsque l'utilisateur actuel est dbo ou sa, l'argument owner_name peut prendre le nom de n'importe quel utilisateur ou rôle valide. Dans le cas contraire, owner_name doit être le nom de l'utilisateur actif, le nom d'un utilisateur pour lequel l'utilisateur actif possède l'autorisation IMPERSONATE, ou le nom d'un rôle auquel appartient l'utilisateur actif.ON QUEUE [ schema_name**.** ] queue_name
Spécifie la file d'attente qui reçoit les messages pour le service. Cette file d'attente doit exister dans la même base de données que celle du service. Si aucun argument schema_name n'est fourni, le schéma est le schéma par défaut de l'utilisateur qui exécute l'instruction.contract_name
Spécifie un contrat pour lequel ce service peut être une cible. Les programmes de service initient des conversations avec le service à l'aide des contrats spécifiés. Si aucun contrat n'est précisé, le service peut seulement initier des conversations.[DEFAULT]
Indique que le service peut être une cible pour des conversations respectant le contrat DEFAULT. Dans le contexte de cette clause, DEFAULT n'est pas un mot clé et il doit être délimité comme un identificateur. Le contrat DEFAULT autorise les deux côtés de la conversation à envoyer des messages de type DEFAULT. Le type de message DEFAULT utilise la validation NONE.
Notes
Un service expose les fonctionnalités fournies par les contrats avec lesquels il est associé, pour qu'ils puissent être utilisés par d'autres services. L'instruction CREATE SERVICE spécifie les contrats pour lesquels ce service est la cible. Un service est une cible exclusivement pour les conversations qui utilisent les contrats spécifiés par le service. Un service qui ne spécifie aucun contrat n'expose aucune fonctionnalité aux autres services.
Les conversations lancées à partir de ce service peuvent utiliser n'importe quel contrat. Vous créez un service sans spécifier de contrat lorsque le service initie seulement des conversations.
Lorsque Service Broker accepte une nouvelle conversation d'un service distant, le nom du service cible détermine la file d'attente où Service Broker place les messages dans la conversation.
Autorisations
L'autorisation de création d'un service est accordée par défaut aux membres du rôle de base de données fixe db_ddladmin ou db_owner et aux membres du rôle serveur fixe sysadmin. L'utilisateur exécutant l'instruction CREATE SERVICE doit disposer de l'autorisation REFERENCES pour la file d'attente et tous les contrats spécifiés.
L'autorisation REFERENCES pour un service est accordée par défaut au propriétaire du service, aux membres du rôle de base de données fixe db_ddladmin ou db_owner et aux membres du rôle serveur fixe sysadmin. Les autorisations SEND pour un service sont accordées par défaut au propriétaire du service, aux membres du rôle de base de données fixe db_owner et aux membres du rôle de serveur fixe sysadmin.
Un service ne peut pas être un objet temporaire. Les noms de service commençant par # sont autorisés, mais ce sont des objets permanents.
Exemples
A.Création d'un service avec un contrat
L'exemple suivant crée le service //Adventure-Works.com/Expenses dans la file d'attente ExpenseQueue du schéma dbo. Les dialogues qui ciblent ce service doivent respecter le contrat //Adventure-Works.com/Expenses/ExpenseSubmission.
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B.Création d'un service avec plusieurs contrats
L'exemple suivant crée le service //Adventure-Works.com/Expenses dans la file d'attente ExpenseQueue. Les dialogues qui ciblent ce service doivent respecter le contrat //Adventure-Works.com/Expenses/ExpenseSubmission ou le contrat //Adventure-Works.com/Expenses/ExpenseProcessing.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
C.Création d'un service sans contrat
L'exemple suivant crée la file d'attente //Adventure-Works.com/Expenses on the ExpenseQueue du service. Ce service ne possède pas d'informations de contrat. Par conséquent, il ne peut être que l'initiateur d'un dialogue.
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;