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


Системные сообщения компонента Service Broker

Компонент Service Broker использует три типа системных сообщений для обмена сведениями о состоянии и ошибках.

Обработка системных сообщений

Большинство сообщений в диалоге компонента Service Broker — это определяемые приложениями сообщения, используемые для обмена сообщениями между службами. Каждое сообщение должно соответствовать формату типа сообщения, определенному в инструкции CREATE MESSAGE TYPE. Набор типов сообщений, допускаемых для диалога, определяется в контракте, указанном в инструкции BEGIN DIALOG CONVERSATION.

В дополнение к определяемым приложениями типам сообщений, указанным в контракте, любой диалог также может принимать сообщения, использующие один из трех определенных системой типов сообщений. Эти типы сообщений используются компонентом Service Broker для сообщения об ошибках и о состоянии диалогов. В каждом приложении должна быть реализована логика обработки сообщений об ошибках и сообщений о завершении диалога. Если в ходе диалога приложение устанавливает таймер двустороннего диалога, оно должно также содержать логику обработки сообщений таймера диалога. Компонент Service Broker предоставляет эти типы сообщений в распоряжение каждой службы независимо от того, входит ли она в контракт. Дополнительные сведения см. в разделе Обработка сообщений об ошибках компонента 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.

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

Сообщения таймера диалога

Сообщения таймера диалога свидетельствуют об истечении времени, заданного для таймера интервала. Эти сообщения имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Каждый таймер диалога доступен только одной стороне диалога. Компонент Service Broker никогда не отправляет сообщения таймера диалога другой стороне.

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