Создание типов сообщений компонента Service Broker
Тип сообщений определяет имя определенного класса сообщений и тип проверки, которую компонент Service Broker выполняет для сообщений этого класса. Чтобы определить типы сообщений, которые будут использоваться в приложении, сначала следует спланировать задачи, которые должно выполнять приложение, а данные, необходимые для выполнения каждой задачи.
Наиболее распространенным подходом к созданию приложения является выбор для сообщений такой структуры, где каждое сообщение содержит сведения, необходимые для одного этапа задачи. Если каждое сообщение содержит сведения для одного этапа задачи, приложение может просто получить сообщение, выполнить этап и отправить ответ в рамках одной транзакции. Поэтому для многих приложений самым простым способом определить типы сообщения и содержимое сообщений является определение границ транзакций для задач, выполняемых приложением. Каждый отдельный этап является транзакцией, а каждая транзакция соответствует типу сообщений, которыми обмениваются службы. Сведения о состоянии, результаты и выходные данные также являются типами сообщений.
Протоколы связи компонента Service Broker предназначены для работы в обмене сообщениями такого стиля. Протокол диалога фрагментирует крупные сообщения для передачи и гарантирует, что большие сообщения не помешают передаче маленьких сообщений.
Выбор типа проверки
Тип проверки, указанной для сообщения, зависит от содержимого сообщения. Распространенной практикой является использование самой строгой проверки во время тестирования, а затем выбор менее строгой проверки с целью повысить производительность после развертывания приложения. Например, типизированный XML-документ может участвовать в обмене данными в качестве текста сообщения, в котором задана проверка NONE. В этом случае приложение выполняет проверку сообщения во время обработки XML-документа.
В сетевой формат сообщения входит имя типа сообщений. Поэтому имена типов сообщений часто выбираются так, чтобы избежать проблем с параметрами сортировки и конфликтов имен. Дополнительные сведения о задании имен см. в разделе Задание имен для объектов компонента Service Broker.
Указание на успешное и неуспешное выполнение
Обычно приложение не определяет новые типы сообщений для указания на успешное или неуспешное выполнение. Вместо того следует использовать инструкцию END CONVERSATION, чтобы показать, что диалог завершен, а задача выполнена успешно. Если же задача завершается с ошибкой, включите параметр WITH ERROR, чтобы вернуть в диалог сообщение об ошибке.
В общем случае после выполнения задачи только один из участников диалога должен завершать диалог. Другой участник только выполняет инструкцию END CONVERSATION в ответ на сообщение End Dialog или Error. Обычно в документации по службе указывается, какой участник завершает диалог в случае, когда диалог выполняется успешно. Указание этих сведений в документации помогает избежать проблем, когда ни один из участников не завершает диалог или когда один участник завершает диалог, а второй продолжает выполнять задачи. Обе конечные точки должны иметь возможность обрабатывать сообщения об ошибке, поскольку внутренние сообщения компонента Service Broker доставляются в обе конечные точки. Например, если время жизни диалога истекает раньше, чем он закрывается, обе конечные точки получают сообщение об ошибке компонента Service Broker.
Любой из участников в любой момент может завершить диалог с ошибкой. Описание обработки сообщений об ошибке компонента Service Broker см. в разделе Обработка сообщений об ошибках компонента Service Broker.
См. также