CREATE SERVICE (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Crea un nuevo servicio. Un servicio de Service Broker es un nombre para una tarea o un conjunto de tareas específicos. Service Broker utiliza el nombre del servicio para enrutar mensajes, entregar mensajes a la cola correcta en una base de datos y aplicar el contrato para una conversación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CREATE SERVICE service_name  
   [ AUTHORIZATION owner_name ]  
   ON QUEUE [ schema_name. ]queue_name  
   [ ( contract_name | [DEFAULT][ ,...n ] ) ]  
[ ; ]  

Argumentos

service_name
Es el nombre del servicio que se va a crear. El servicio nuevo se crea en la base de datos actual, la cual pertenece a la entidad de seguridad especificada en la cláusula AUTHORIZATION. No se pueden especificar nombres de servidor, base de datos o esquema. service_name debe ser un sysname válido.

Nota

No cree un servicio que use la palabra clave ANY para service_name. Cuando especifica ANY para un nombre de servicio en CREATE BROKER PRIORITY, la prioridad se considera para todos los servicios. No se limita a un servicio cuyo nombre sea ANY.

AUTHORIZATION owner_name
Establece el propietario del servicio en el usuario o el rol de base de datos especificado. Cuando el usuario actual es dbo o sa, owner_name puede ser el nombre de cualquier usuario o rol válidos. En caso contrario, owner_name debe ser el nombre del usuario actual, el nombre de un usuario para el que el usuario actual tiene permisos IMPERSONATE o el nombre de un rol al que pertenece el usuario actual.

ON QUEUE [ schema_name. ] queue_name
Especifica la cola que recibe mensajes para el servicio. La cola debe existir en la misma base de datos que el servicio. Si no se proporciona schema_name, el valor es el esquema predeterminado del usuario que ejecuta la instrucción.

contract_name
Especifica un contrato para el que este servicio puede ser un destino. Los programas de servicio inician conversaciones con este servicio utilizando los contratos especificados. Si no se especifica ningún contrato, el servicio solo puede iniciar conversaciones.

[DEFAULT]
Especifica que el servicio puede ser un destino para conversaciones que sigan el contrato DEFAULT. En el contexto de esta cláusula, DEFAULT no es una palabra clave y debe delimitarse como un identificador. El contrato DEFAULT permite que los dos extremos de la conversación envíen mensajes del tipo DEFAULT. El tipo de mensajes DEFAULT utiliza la validación NONE.

Comentarios

Un servicio muestra la funcionalidad proporcionada por los contratos a los que está asociado, de modo que puedan usarlos otros servicios. Este servicio es destino de los contratos que se especifican en la instrucción CREATE SERVICE. Un servicio solo puede ser destino de conversaciones que utilizan los contratos especificados por el servicio. Un servicio que no especifica ningún contrato no muestra ninguna funcionalidad para otros servicios.

Las conversaciones iniciadas desde este servicio pueden utilizar cualquier contrato. Puede crear un servicio sin especificar contratos solo si el servicio inicia conversaciones.

Cuando Service Broker acepta una nueva conversación de un servicio remoto, el nombre del servicio de destino determina la cola en la que el agente colocará los mensajes de la conversación.

Permisos

Tienen permiso para crear un servicio los miembros de los roles fijos de base de datos db_ddladmin o db_owner o el rol fijo de servidor sysadmin. El usuario que ejecuta la instrucción CREATE SERVICE debe tener permiso REFERENCES en la cola y en todos los contratos especificados.

De forma predeterminada, el permiso REFERENCES para un servicio corresponde al propietario del servicio, a los miembros de los roles fijos de base de datos db_ddladmin o db_owner o a los miembros del rol fijo de servidor sysadmin. De forma predeterminada, los permisos SEND para un servicio corresponden al propietario del servicio, a los miembros del rol fijo de base de datos db_owner o a los miembros del rol fijo de servidor sysadmin.

Un servicio no puede ser un objeto temporal. Los servicios que empiezan por # están permitidos, pero son objetos permanentes.

Ejemplos

A. Crear un servicio con un contrato

En el ejemplo siguiente se crea el servicio //Adventure-Works.com/Expenses en la cola ExpenseQueue del esquema dbo. Los diálogos destinados a este servicio deben seguir el contrato //Adventure-Works.com/Expenses/ExpenseSubmission.

CREATE SERVICE [//Adventure-Works.com/Expenses]  
    ON QUEUE [dbo].[ExpenseQueue]  
    ([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;  

B. Crear un servicio con varios contratos

En el ejemplo siguiente se crea el servicio //Adventure-Works.com/Expenses en la cola ExpenseQueue. Los diálogos destinados a este servicio deben seguir el contrato //Adventure-Works.com/Expenses/ExpenseSubmission o el contrato //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. Crear un servicio sin contratos

En el siguiente ejemplo se crea la cola del servicio //Adventure-Works.com/Expenses on the ExpenseQueue. Este servicio no tiene información de contrato. Por lo tanto, el servicio solo puede ser el iniciador de un diálogo.

CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;  

Vea también

ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)