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

Bil*_*uch 1 biztalk

我有一个BizTalk架构,看起来像这样:

<Root>
   <Header>
      <SomeData></SomeData>
      <Detail>
         <MoreData1></MoreData1>
         <MoreData2></MoreData2>
         <MoreData3></MoreData3>
      </Detail>
   </Header>
</Root>
Run Code Online (Sandbox Code Playgroud)

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

通过为其分配XmlDocument,在业务流程内创建消息.然后,该消息将在业务流程中的其他几个位置使用,并将其写入磁盘以供检查.

问题是,一旦写出消息,如果我尝试使用那些相同的xml文件作为输入实例,它们将无法通过验证.例如,某些<Detail>元素可能有多个元素,而有些元素可能缺失<MoreData2>.

一切似乎都在运行,所以我认为目前这并不是一个大问题,但我想知道在应用程序运行时,未通过模式验证的消息将不会引发错误?

Chr*_*ris 5

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

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

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

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