CREATE SERVICE (Transact-SQL)

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 forzar el contrato para una conversación.

Icono de vínculo a temasConvenciones 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 tipo sysname válido.

    Nota

    No cree un servicio que utilice 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 función de base de datos especificado. Si el usuario actual es dbo o sa, owner_name puede ser el nombre de cualquier usuario o función 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 permiso IMPERSONATE o el nombre de una función a la 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 sólo 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 sólo 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 sólo 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 broker colocará los mensajes de la conversación.

Permisos

De forma predeterminada, tienen permiso para crear un servicio los miembros de las funciones de base de datos fijas db_ddladmin o db_owner y la función fija del servidor sysadmin. El usuario que ejecuta la instrucción CREATE SERVICE debe tener permisos REFERENCES en la cola y en todos los contratos especificados.

REFERENCES permiso para modificar valores predeterminados de servicio al propietario del servicio, a los miembros de las funciones de base de datos fijas ddl_admin o db_owner y a los miembros de la función fija del servidor sysadmin. De forma predeterminada, tienen permiso SEND de un servicio el propietario del servicio, los miembros de la función fija de base de datos db_owner y los miembros de la función fija 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 ejemplo siguiente 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 sólo puede ser el iniciador de un diálogo.

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