Contratos

Un contrato define los tipos de mensajes que utiliza una aplicación para realizar una tarea determinada. Un contrato es un acuerdo entre dos servicios sobre el cual los mensajes de cada servicio realizan una tarea determinada. Las definiciones de contrato se almacenan en la base de datos donde se crea el tipo.

Debe crear un contrato idéntico en cada base de datos que participa en una conversación. Por ejemplo, si una aplicación de recursos humanos desea comprobar un Id. de empleado, el servicio que solicita la comprobación debe saber los tipos de mensajes que espera el otro servicio. El servicio que realiza la solicitud también debe saber los tipos de mensajes que puede recibir y estar preparado para procesarlos.

El contrato especifica los tipos de mensajes que se pueden utilizar para realizar la tarea deseada. El contrato también especifica qué participante de la conversación puede utilizar cada tipo de mensaje. Algunos tipos de mensajes pueden enviarse por cualquier participante; otros tipos de mensajes están restringidos y sólo los pueden enviar el iniciador o el destino. Un contrato debe contener un tipo de mensaje enviado por el iniciador o un tipo de mensaje enviado por algún participante; de lo contrario, el iniciador no podrá iniciar una conversación que utilice el contrato.

Service Broker también incluye un contrato integrado denominado DEFAULT. El contrato DEFAULT sólo contiene el tipo de mensaje SENT BY ANY. Si no se especifica ningún contrato en la instrucción BEGIN DIALOG, Service Broker utiliza el contrato DEFAULT.

Por ejemplo, un contrato puede tener tipos de mensajes SubmitRequest, ProcessRequest y RequestStatus. Sólo el extremo iniciador puede utilizar SubmitRequest y sólo el extremo de destino puede enviar ProcessRequest. Cualquiera de los participantes en la conversación puede enviar el tipo de mensaje RequestStatus. El tipo de mensaje RequestStatus permite al participante ver en qué parte del procesamiento se encuentra el destino o comprobar con el iniciador el estado de cualquier procesamiento en paralelo relacionado con esta solicitud.