Создание приложений компонента Service Broker

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

В приложении для вызывающей службы используется инструкция BEGIN DIALOG, в которой указываются сведения о службах в каждой конечной точке и контракт службы, который будет использоваться приложением для организации связи. В приложении используется инструкция SEND для отправки целевой службе первого сообщения диалога. Приложение должно быть готово получать и обрабатывать сообщения от компонента Service Broker, даже если контракт не разрешает целевой службе возвращать сообщения. Вызывающее приложение часто реализуется в виде двух отдельных компонентов. Один компонент начинает диалог, а другой обрабатывает сообщения, которые прибывают в очередь.

Приложение целевой службы получает и обрабатывает сообщения от вызывающей службы. Это приложение также должно быть готово получать и обрабатывать сообщения от компонента Service Broker.

В зависимости от потребностей службы часть приложения, которая обрабатывает очередь, может запускаться несколькими различными способами. Дополнительные сведения о запуске приложения, использующего компонент Service Broker, см. в разделе Выбор стратегии запуска.

Независимо от способа запуска приложения оно начинает транзакцию и с помощью инструкции RECEIVE выводит сообщение из очереди. Приложение извлекает данные из сообщений и выполняет необходимую обработку. При необходимости приложение с помощью инструкции SEND отправляет сообщения другой стороне диалога. Затем приложение фиксирует транзакцию. Для повышения эффективности приложение может обрабатывать несколько сообщений в рамках одной транзакции. Службы, хранящие сведения о состоянии, часто используют инструкцию GET CONVERSATION GROUP, чтобы заблокировать группу сообщений, получить состояние этой группы, а затем обработать несколько сообщений из этой группы.

Диалог продолжается с использованием инструкций SEND и RECEIVE для передачи сообщений между конечными точками. При необходимости в любой момент один из участников диалога может с помощью инструкции BEGIN DIALOG начать диалог с другой службой, чтобы получить дополнительные данные. Например, приложение, обрабатывающее уведомление о событии, может запустить другой диалог со службой, которая передает данные о сотрудниках, чтобы получить текущие контактные сведения перед отправкой предупреждения.

Когда цель диалога достигнута, приложение в соответствующей конечной точке использует инструкцию END CONVERSATION для завершения диалога. Другой участник диалога получает сообщение END CONVERSATION и создает сообщение END CONVERSATION на своей стороне. После того как оба участника отправили сообщения END CONVERSATION, диалог завершается.

Если происходит ошибка, один из участников диалога может указать на ошибку, завершив диалог с использованием предложения WITH ERROR. Предложение WITH ERROR завершает диалог и отправляет другому участнику диалога сообщение об ошибке компонента Service Broker.

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

В этом разделе