Сообщения компонента Service Broker
Взаимодействие приложений осуществляется в основном в форме обмена специфическими для приложений сообщениями, которые определяются как объекты типов сообщений. Кроме того, компонент Service Broker поддерживает три типа сообщений, содержащих данные компонента Service Broker, а не данные, специфические для приложений. В каждом приложении должна быть реализована логика обработки сообщений об ошибках и сообщений о завершении диалога. Если в ходе диалога приложение устанавливает таймер двустороннего диалога, оно должно также содержать логику обработки сообщений таймера диалога. Компонент Service Broker предоставляет эти типы сообщений в распоряжение каждой службы независимо от того, входит ли она в контракт.
Сообщения таймера диалога
Сообщения таймера диалога свидетельствуют об истечении времени, заданного для таймера интервала. Эти сообщения имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Каждый таймер диалога доступен только одной стороне диалога. Компонент Service Broker никогда не отправляет сообщения таймера диалога другой стороне.
Сообщения таймера диалога являются пустыми. Операция получения сообщения получает сообщение таймера диалога перед любыми другими сообщениями диалога, независимо от порядка поступления в очередь сообщения об истечении времени ожидания.
Сообщения об ошибках
Если удаленная служба завершает диалог с ошибкой или локальный компонент Service Broker регистрирует в ходе диалога неисправимую ошибку, то этот компонент создает сообщение об ошибке. Сообщения об ошибках имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/Error. Сообщения об ошибках проходят проверку правильности синтаксиса XML.
В XML-документе, содержащемся в сообщении об ошибке, используются элементы из пространства имен https://schemas.microsoft.com/SQL/ServiceBroker. Корневой элемент этого документа имеет локальное имя Error и содержит элементы с именами Code и Message. Элемент Code содержит целочисленное значение. Элемент Message содержит текст ошибки в удобной для чтения форме.
Например, сообщение об ошибке, созданное службой, обрабатывающей отчеты о расходах, может содержать следующий XML-код (форматирование изменено в целях повышения удобства прочтения):
<?xml version="1.0"?>
<Error xmlns="https://schemas.microsoft.com/SQL/ServiceBroker">
<Code>12</Code>
<Description>
Unknown cost center "127-1000". Please check the cost center list
and resubmit the report.
</Description>
</Error>
Операция получения сообщения получает сообщение об ошибке перед любыми другими сообщениями диалога, независимо от порядка поступления сообщения об ошибке в очередь. Если в очереди находятся и сообщение таймера диалога, и сообщение об ошибке, первым извлекается сообщение таймера диалога.
Если после появления в диалоге сообщения об ошибке приложение попытается отправить в этом диалоге сообщение, компонент Service Broker вызовет ошибку. Тем не менее даже после получения сообщения об ошибке приложение может получить все оставшиеся сообщения диалога.
Сообщения о завершении диалога
Когда приложение завершает диалог без ошибки, локальный компонент Service Broker отправляет удаленному сообщение о завершении диалога. Сообщения о завершении диалога имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.
Эти сообщения являются пустыми. Операция получения сообщения получает сообщение о завершении диалога в том порядке, в котором оно поступило в очередь.
См. также
Задачи
Как извлечь данные из сообщения об ошибке компонента Service Broker (Transact SQL)