Contratos

Um contrato define qual tipo de mensagem um aplicativo usa para realizar uma tarefa em particular. Um contrato é um acordo entre dois serviços sobre quais mensagens cada serviço envia realizar uma tarefa em particular. As definições de contrato persistem no banco de dados em que o tipo é criado.

Você cria um contrato idêntico em cada banco de dados que participa de uma conversação. Por exemplo, se um aplicativo de recursos humanos deseja verificar a ID de um funcionário, o serviço que solicita a verificação precisa saber quais tipos de mensagem o outro serviço espera. O serviço solicitante também precisa saber quais tipos de mensagem pode esperar receber para que esteja preparado para processá-los.

O contrato especifica quais tipos de mensagem podem ser usados para realizar o trabalho desejado. O contrato também especifica qual participante na conversação pode usar cada tipo de mensagem. Alguns tipos de mensagem podem ser enviados por qualquer participante; outros são restritos ao envio apenas pelo iniciador ou somente pelo destino. Um contrato deve conter um tipo de mensagem enviado pelo iniciador ou enviado por cada participante; caso contrário, não haverá nenhuma forma de o iniciador começar uma conversação que use o contrato.

O Service Broker também inclui um contrato interno denominado DEFAULT. O contrato de DEFAULT contém somente o tipo de mensagem SENT BY ANY. Se nenhum contrato for especificado na instrução BEGIN DIALOG, o Service Broker usará o contrato DEFAULT.

Por exemplo, um contrato pode ter os tipos de mensagem SubmitRequest, ProcessRequest e RequestStatus. Somente o ponto de extremidade iniciador pode usar SubmitRequest, e apenas o ponto de extremidade de destino pode enviar ProcessRequest. Cada participante na conversação pode enviar o tipo de mensagem RequestStatus. O tipo de mensagem RequestStatus permite que o participante veja onde o destino está no processamento ou consulte o iniciador sobre o status de qualquer processamento paralelo relativo a essa solicitação.