Поделиться через


Контракты

Контракт определяет тип сообщений, которые приложение использует для выполнения конкретной задачи. Контракт представляет собой соглашение между двумя службами о том, какое сообщение отправляет каждая служба, чтобы выполнить определенную задачу. Определения контрактов постоянно хранятся в базе данных, в которой был создан этот тип.

В каждой базе данных, участвующей в диалоге, создается одинаковый контракт. Например, если приложению по кадрам нужно проверить идентификатор работника, служба, запрашивающая проверку, должна знать, какие типы сообщений ожидает другая служба. Запрашивающая служба должна также знать, какие типы сообщений она может получить, чтобы подготовиться к их обработке.

В контракте указывается, какие типы сообщений можно использовать для выполнения нужной задачи. В контракте также указывается, какой тип сообщений может использовать каждый участник. Некоторые типы сообщений могут отправлять оба участника, другие могут отправляться только инициатором или только целевым участником диалога. Контракт должен содержать тип сообщений, отправляемый инициатором, или тип сообщений, отправляемый обоими участниками. В противном случае инициатор не сможет начать диалог, который использует этот контракт.

Компонент Service Broker также включает встроенный контракт с именем DEFAULT. Контракт DEFAULT содержит только тип сообщений SENT BY ANY. Если в инструкции BEGIN DIALOG не определен ни один контракт, компонент Service Broker использует контракт DEFAULT.

Например, контракт может иметь типы сообщений SubmitRequest, ProcessRequest и RequestStatus. Тип SubmitRequest может использовать только конечная точка-инициатор, а тип ProcessRequest может использовать только целевая конечная точка. Каждый из участников диалога может посылать сообщения типа RequestStatus. Тип сообщений RequestStatus позволяет участнику видеть, на каком этапе обработки находится цель, или проверять у инициатора состояние любой параллельной обработки данных, относящейся к запросу.