首页 > 代码库 > BizTalk开发系列(十七) 信封架构(Envelop)
BizTalk开发系列(十七) 信封架构(Envelop)
在BizTalk开过中使用信封架构可以提高BizTalk处理性能。比如在使用SQL Adapter时使用信封选取多条记录在通过管道的XML拆装器时将信封里的XML消息部分拆分为单独的消息,发布到MessageBox。 BizTalk会创建多个处理实例处理这些消息。减少SQL Adapter与数据库的交互次数。
什么是信封架构?
微软官方对信封架构是这样定义的:信封架构是一种特殊类型的 XML 架构。(不是W3C定义的)信封架构用于定义 XML 信封的结构,以用于将一个或多个 XML 业务文档包装到单个 XML 实例消息中。在将 XML 架构定义为信封架构时,根据是否在信封架构中定义了多个根记录,可能需要其他一些属性设置。
如何创建信封架构?
大部分情况下信封架构是一个比较简单的XML架构。因为在XML拆装过程中信封部分的内容是要被删除的。当然除了信封的升级属性和可分辨字段会升级到消息 的上下文中被信封里的消息个体所继承。在BizTalk Schema编译器中创建信封架构前几步跟创建普通架构是一样的,只不过需要设置一下相关的属性。具体是这样的:
创建一个Schema。点击<Schema>在属性设置中设置Envelop属性为Yes。在信封根(Root)中设置“正文 Xpath”。如果架构中存在多个根且没有设置根引用则需要为每个根设置”正文 Xpath”。如果架构在存在多个根且设置了根引用则为根设置“正文 Xpath”。其他根则可选。
一般情况下,在“正文Xpath”设置的对话框中选择相应的节点则可以自动生成相应的Xpath表达式。如果自动生成功能无法满足用户需求的情况下,用户可以手动输入Xpath表达式。
信封的拆装
信封的拆装发生在接收管道的的拆装阶段通过使用XML拆装器完成的。XML 拆装器管道组件将 XML 解析功能和拆装功能组合到一个组件中。该组件的主要功能如下:
- 删除信封。
- 根据预定义的Xpath对消息正文进行拆装。
- 将信封部分的可分辨字段和属性升级到消息上下文。
收到消息之后,拆装器通过使用在设计时指定的与该组件关联的架构来静态地解析,或通过在运行时根据消息类型(Namespace#RootName)确定 信封架构来动态地解析。架构用于在信封解析过程中对消息的结构进行验证。如果未定义架构构,则可通过使用根节点的命名空间和基名称查找架构,从而以递归方 式确定消息架构。
如果有且只有一个架构与消息匹配,则拆装器读取架构的批注内容,如下所示。(可能实际过程中会读取更多信息)
架构批注指明此消息为信封架构。拆装器通过使用预定义的 XPath(编码为与信封和消息相关联的 XSD 架构中的批注)从信封和消息实例中提取内容属性。该组件将对信封内的每个文档进行解析。对于每个文档,BizTalk 消息对象都使用其本身的上下文创建,从信封和文档本身升级的所有属性均是从此上下文中复制而来。
<xs:annotation>
<xs:appinfo>
<b:recordInfo body_xpath="/*[local-name()=‘Root‘ and namespace-uri()=‘http://SchemasAPP.EnvelopSchema‘]/*[local-name()=‘EnvelopBody‘ and namespace-uri()=‘‘]" />
拆装器的“Recoverable Interchange Processing”属性表示:如果值为True则信封中的所有消息都能找到唯一的消息架构时该信封中的所有正文消息才会处理,否则挂起所有消息。如果值为False则只有找不到消息架构的消息会被挂其他消息则会被处理。(此功能不只针对信封消息!)
BizTalk开发系列(十七) 信封架构(Envelop)