Sql server 2008 SQL Server Service Broker系统错误-9616,何时会发生?

Sql server 2008 SQL Server Service Broker系统错误-9616,何时会发生?,sql-server-2008,sql-server-2005,service-broker,Sql Server 2008,Sql Server 2005,Service Broker,我的一个Service Broker对话配置中有一个场景,如下所示: <Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-9616</Code><Description>A message of type 'here_is_the_name' was received and failed XML validation. XML parsing: l

我的一个Service Broker对话配置中有一个场景,如下所示:

<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-9616</Code><Description>A message of type 'here_is_the_name' was received and failed XML validation.  XML parsing: line 1, character 547, illegal xml character This occurred in the message with Conversation ID 'here_is_the_guid', Initiator: 1, and Message sequence number: 0.</Description</Error>
  • 一种消息类型,仅由启动器发送(验证=格式良好的XML,无XSD
  • 具有此消息类型的一个协定
  • 都部署在启动器和目标端(远程计算机)
偶尔我会在目标队列中发现Service Broker系统错误消息,如下所示:

<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-9616</Code><Description>A message of type 'here_is_the_name' was received and failed XML validation.  XML parsing: line 1, character 547, illegal xml character This occurred in the message with Conversation ID 'here_is_the_guid', Initiator: 1, and Message sequence number: 0.</Description</Error>
我看了Remus Rusanu的博客,他说:

此系统错误被发送到已发送标记为符合特定XML模式的消息类型,但有效负载未能通过所述模式的XML验证的会话

在我的例子中,没有涉及XML模式,我试图使用相同的SQL Server版本在我的dev env中重现这个例子,但我无法做到这一点


我想知道,虽然我没有使用XSD模式,但是否有可能收到此系统错误消息?如果是这样,什么时候会发生,ServiceBroker会在什么情况下生成上述错误

该消息清楚地表明“XML解析:第1行,字符547,非法XML字符”,因此在我看来,它与模式验证无关。
传输级别是否会遇到一些问题(TCP错误),这就是Service Broker生成此错误消息的原因?

消息验证是在将消息排入目标队列时进行的,而不是在发送时。提供消息类型验证(无、XML、XDS)以保护您的应用程序。仅在发送期间进行验证是不够的,因为恶意应用程序可以使用ServiceBroker(有线协议模拟器)发送不带的消息。由于排队过程中的验证是强制性的,因此在发送过程中添加验证会增加CPU负担,但价值很小

这意味着,您的发送端应用程序正在发送无效的XML,这会在目标端被捕获。我的博客上的措辞选择不当,我应该更明确地指出,验证可能会导致模式失败(如果指定),或者可能导致XML测试失败


您能发布您发送的邮件正文吗?

谢谢Remus的回复。我理解第一部分,并且我知道SSB是以这种方式工作的,对排队进行验证非常有意义。第二部分让我有点困惑,因为我一直知道(这是在你的博客上关于Fire and Forget模式的介绍),如果发起方发送了一条消息,而目标方因为它不是有效的XML而不接受它,那么目标方将向发起方发送一条错误消息。这正是我多次观察到的,但在本期中我描述的案例中,错误消息在目标队列中,这是单向消息交换。不幸的是,我无法发布消息正文,因为在我们的生产中发生了这种情况,不幸的是,最初使用下面的Service Broker的EAI应用程序是使用Fire and Forget模式部署的(是的,我知道这很糟糕,我正试图影响一些人来改变这一点)。因此,在我的情况下,即使更改保留也没有用。消息位于目标队列中意味着存在(无效XML)来自被启动器拒绝的目标的回复。仔细检查目标代码。监视器。我在dev上部署了我的生产对话配置,并测试了您的建议。由于这是单向消息交换,如上所述,合同规定只有启动器才能发送消息,同时尝试从目标I g进行回复ot:Msg 8434,16级,状态1,第1行消息无法发送,因为消息类型“Msg_type_name”在合同中被标记为由发起人发送,但此服务是目标。