BizTalk消息未通过架构验证,但处理得很好

时间:2011-01-05 17:15:27

标签: biztalk

我有一个类似于这样的BizTalk架构:

<Root>
   <Header>
      <SomeData></SomeData>
      <Detail>
         <MoreData1></MoreData1>
         <MoreData2></MoreData2>
         <MoreData3></MoreData3>
      </Detail>
   </Header>
</Root>

没有元素设置了Max Occurs或Min Occurs值。

通过为业务流程分配XmlDocument,在业务流程中创建消息。然后在业务流程中的其他几个地方使用该消息,并将其写入磁盘进行检查。

问题在于,一旦写出消息,如果我尝试将某些相同的xml文件用作输入实例,则它们将无法通过验证。例如,某些元素可能包含多个<Detail>元素,而某些元素可能会丢失<MoreData2>

所有内容似乎都在运行,所以我认为目前这并不是一个大问题,但我想知道在应用程序运行时,未通过模式验证的消息是如何产生错误的?

1 个答案:

答案 0 :(得分:5)

在BizTalk中,XML消息仅在管道中验证。一旦消息到达编排,就会假设(为了效率)消息不需要根据其模式进行验证。使用转换创建消息时,架构验证不会发生在。

之后

因此,在您的情况下,进入的消息应该具有启用验证的XML接收管道。这将阻止消息进入。同样,您可以在XML Send Pipeline上启用验证。这将阻止不良消息的形成。

但是,有一些选项可以在业务流程中进行架构验证。首先描述here。如果您使用Google / Bing,还有更多类似的技术。

此处还有一篇有趣的文章,您可以在Orchestration here中启用XSD验证。这听起来不错,但它是服务器范围的设置。因此它将适用于所有应用程序......包括正在运行的应用程序。