我有一个类似于这样的BizTalk架构:
<Root>
<Header>
<SomeData></SomeData>
<Detail>
<MoreData1></MoreData1>
<MoreData2></MoreData2>
<MoreData3></MoreData3>
</Detail>
</Header>
</Root>
没有元素设置了Max Occurs或Min Occurs值。
通过为业务流程分配XmlDocument,在业务流程中创建消息。然后在业务流程中的其他几个地方使用该消息,并将其写入磁盘进行检查。
问题在于,一旦写出消息,如果我尝试将某些相同的xml文件用作输入实例,则它们将无法通过验证。例如,某些元素可能包含多个<Detail>
元素,而某些元素可能会丢失<MoreData2>
。
所有内容似乎都在运行,所以我认为目前这并不是一个大问题,但我想知道在应用程序运行时,未通过模式验证的消息是如何产生错误的?
答案 0 :(得分:5)
在BizTalk中,XML消息仅在管道中验证。一旦消息到达编排,就会假设(为了效率)消息不需要根据其模式进行验证。使用转换创建消息时,架构验证不会发生在。
之后因此,在您的情况下,进入的消息应该具有启用验证的XML接收管道。这将阻止消息进入。同样,您可以在XML Send Pipeline上启用验证。这将阻止不良消息的形成。
但是,有一些选项可以在业务流程中进行架构验证。首先描述here。如果您使用Google / Bing,还有更多类似的技术。
此处还有一篇有趣的文章,您可以在Orchestration here中启用XSD验证。这听起来不错,但它是服务器范围的设置。因此它将适用于所有应用程序......包括正在运行的应用程序。