在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)确定 信封架构来动态地解析。架构用于在信封解析过程中对消息的结构进行验证。如果未定义架构构,则可通过使用根节点的命名空间和基名称查找架构,从而以递归方 式确定消息架构。

如果有且只有一个架构与消息匹配,则拆装器读取架构的批注内容,如下所示。(可能实际过程中会读取更多信息)

<xs:appinfo> <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />

架构批注指明此消息为信封架构。拆装器通过使用预定义的 XPath(编码为与信封和消息相关联的 XSD 架构中的批注)从信封和消息实例中提取内容属性。该组件将对信封内的每个文档进行解析。对于每个文档,BizTalk 消息对象都使用其本身的上下文创建,从信封和文档本身升级的所有属性均是从此上下文中复制而来。

<xs:element name="Root"> 

<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)的更多相关文章

  1. BizTalk开发系列(十八) 使用信封拆分数据库消息

    之前写了一篇的<BizTalk开发系列(十七) 信封架构(Envelop)> 是关于信封架构及其拆装原理的,都是理论性的内容.信封在BizTalk开发过程中最常用的应该是在读取SQL Se ...

  2. BizTalk 开发系列(四十一) BizTalk 2010 BAM 安装手记

    使用64位系统可以支持更大的内存,现在服务器基本上都使用64位系统.微软从Windows Server 2008 R2开始服务器版的操作系统也只支持64位了,不过对于像BizTalk这种“繁杂的东西” ...

  3. BizTalk开发系列(三十三)BizTalk之Excel终极解决方案

    Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapte ...

  4. BizTalk开发系列(二十八) MSMQ 适配器

    MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...

  5. BizTalk开发系列(二十二) 开发自定义Map Functoid

    尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...

  6. BizTalk开发系列(二十五) SQL Adapter

    SQL Server 是.NET开发的首选数据库.当然开发BizTalk应用程序很多也离不了SQL Server.针对SQL Server的数据操作BizTalk 提供了SQL Adapter作为与数 ...

  7. BizTalk开发系列(七) Hello World2

    之前根据BizTalk的订阅原理,使用BizTalk管理控制台创建了第一个应用程序 Hello World.但是由于控制台的开发功能有限,绝大多数的BizTalk程序都是在集成开发环境Visual S ...

  8. BizTalk开发系列(十五) Schema设计之Qualified 与Unqualified

    XML Schema中的命名空间前缀限定包括对元素(Element)或属性(Attribute)的限定,即常见的如 “<ns0:root>...</ns0:root>”之类的格 ...

  9. BizTalk开发系列(三十七) 性能监视器在BizTalk性能测试中的使用

    BizTalk应用程序的性能测试和分析是一个非常重要的过程,因为BizTalk的应用程序在Run-time时受部署结构.消息请求数量和消息大小等 的影响很大,因此无论是简单还是复杂的的应用都需要在部署 ...

随机推荐

  1. 7.Android常用第三方支付

    移动支付 用户使用移动的终端完成对所购买商品或者服务的支付功能;分为近场支付(蓝牙支付,刷卡,滴卡),和远程支付(网上支付,短信支付) app支付模块 常见的支付厂商-->常见的支付方式 支付宝 ...

  2. 《DSP using MATLAB》示例Example5.3

  3. mac OS X操作 -- 常用

    显示/隐藏默认隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true/false 重置ROOT密码: http://www. ...

  4. localhost和127.0.0.1 的区别

  5. java,我准备好了

    1.你对自己的未来有什么规划?做了哪些准备? 长期上学好公务员和本专业知识,将来能找一份好工作,并能在职务上履行好相称的工作.短期上在下一学期拿一等奖学金,尽快入党,考出英语四级和二级c语言.任何成就 ...

  6. hadoop 分布式缓存

    Hadoop 分布式缓存实现目的是在所有的MapReduce调用一个统一的配置文件,首先将缓存文件放置在HDFS中,然后程序在执行的过程中会可以通过设定将文件下载到本地具体设定如下: public s ...

  7. JavaScript 的同源策略

    同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就 ...

  8. HDU5853 Jong Hyok and String(二分 + 后缀数组)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5853 Description Jong Hyok loves strings. One da ...

  9. PE的一些水 3-50

    T3: 分解质因数. lalala T4: 暴模. 然而数学方法怎么搞?---->也就是怎么手算?... 于是看了一下讨论区...发现原来我的数学已经低于小学生水平了... 我们把答案abccb ...

  10. 通过Spring Mail Api发送邮件

    使用Java Mail API来发送邮件也很容易实现,但是最近公司一个同事封装的邮件API实在让我无法接受,于是便打算改用Spring Mail API来发送邮件,顺便记录下这篇文章. [Spring ...