Broker 消息

应用程序间的大多数通信都通过定义为消息类型对象的特定于应用程序的消息来处理。 此外,Service Broker 还提供三种类型的消息,它们包含来自 Service Broker 的信息而不是特定于应用程序的数据。 每个应用程序必须包含用于处理错误消息和结束对话消息的逻辑。 如果应用程序对对话会话设置会话计时器,则该应用程序必须包含用于处理对话计时器消息的逻辑。 Service Broker 向每个服务都提供这些消息类型,无论它们是否出现在服务的约定中。

对话计时器消息

对话计时器消息指示对话的会话计时器已过期。 这些消息的消息类型为 **https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer**。 会话计时器只针对会话的一端;Service Broker 从不将对话计时器消息发送给会话的另一端。

对话计时器消息为空消息。 无论超时消息在队列中到达的先后顺序如何,接收操作都先接收该对话的对话计时器消息,然后才接收该对话的其他消息。

错误消息

当远程服务以错误结束对话,或者本地 Broker 在对话中检测到无法恢复的错误时,本地 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>

除该对话的对话计时器消息以外,无论错误消息在队列中到达的先后顺序如何,接收操作都先接收该对话的错误消息,然后才接收该对话的其他消息。 当队列既包含对话计时器消息又包含错误消息时,接收操作先接收对话计时器消息,然后再接收错误消息。

对话的错误消息到达后,如果应用程序尝试向该对话发送消息,Broker 会引发错误。 但是,即使在收到错误消息之后,应用程序也可以接收该对话的任何剩余消息。

结束对话消息

当应用程序结束对话且没有指定错误时,本地 Broker 会向远程 Broker 发送结束对话消息。 结束对话消息的消息类型为 **https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog**。

结束对话消息为空消息。 接收操作按照结束对话消息在队列中的到达顺序接收该消息。

请参阅

任务

如何从 Service Broker 错误消息中检索信息 (Transact SQL)

帮助和信息

获取 SQL Server 2005 帮助