Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
Компонент Service Broker использует три типа системных сообщений для обмена сведениями о состоянии и ошибках Service Broker.
Обработка системных сообщений
Большинство сообщений в диалоге компонента Service Broker — это определяемые приложениями сообщения, используемые для обмена сообщениями между службами. Каждое сообщение должно соответствовать формату типа сообщения, определенному инструкцией CREATE MESSAGE TYPE. Набор типов сообщений, разрешенных для беседы, определяется контрактом, указанным в инструкции BEGIN DIALOG CONVERSATION.
Помимо определяемых приложением типов сообщений, указанных в контракте, любая беседа также может получать сообщения, использующие один из трех системных типов сообщений. Эти типы сообщений используются компонентом 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="http://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>
Операция получения получает сообщение об ошибке перед любым сообщением для этого диалогового окна, кроме сообщения таймера диалога. Это происходит независимо от порядка поступления сообщения об ошибке в очередь. Если очередь содержит сообщение таймера диалога и сообщение об ошибке, операция получения получает сообщение таймера диалога перед сообщением об ошибке.
Когда сообщение об ошибке поступает в диалоговое окно, брокер вызывает ошибку, если приложение пытается отправить сообщение в этом диалоговом окне. Однако приложение может получать все оставшиеся сообщения для диалогового окна даже после получения сообщения об ошибке.
Сообщения об окончании диалоговых окон
Когда приложение завершает диалоговое окно без указания ошибки, локальный брокер отправляет сообщение "Конец диалога" удаленному брокеру. Сообщения о завершении диалога имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog
.
Конечные сообщения диалогового окна — это пустые сообщения. Операция получения получает сообщение "Завершение диалога" в порядке, в котором сообщение прибыло в очередь.
Сообщения таймера диалога
Сообщения таймера диалога указывают, что срок действия таймера беседы в диалоговом окне истек. Эти сообщения имеют тип https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer
. Каждый таймер диалога доступен только одной стороне диалога. Компонент Service Broker никогда не отправляет сообщения таймера диалога другой стороне.
Сообщения таймера диалога — это пустые сообщения. Операция получения получает сообщение таймера диалога перед любым другим сообщением для этого диалогового окна независимо от порядка, в котором сообщение о истечении времени ожидания прибыло в очередь.