在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. Android打包的那些事

    使用gradle打包apk已经成为当前主流趋势,我也在这个过程中经历了各种需求,并不断结合gradle新的支持,一一改进.在此,把这些相关的东西记录,做一总结. 1. 替换AndroidManifes ...

  2. Netty 入门示例

    服务端代码示例 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channe ...

  3. 试听笔记:技术狂人nodejs

    nodejs概念: 让javascript运行在服务端的开发平台.不是一种语言,不是框架,不是库.特点:单线程异步.事件驱动. PHP.JAVA既是语言也是平台. 创始人:Ryan nodejs cm ...

  4. iOS UITextField的returnkey点击事件

      关于隐藏软键盘,网上的办法良莠不齐,大多是通过实现UITextFieldDelegate来隐藏软键盘,该方法代码较多,且在文本框很多的时不好处理.我经过搜索与摸索,找到了最佳的处理办法.(引用的) ...

  5. 疯狂java学习笔记之面向对象(八) - static和final

    一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...

  6. WPF之依赖属性

    Introduction When you begin to develop appliations with WPF, you will soon stumble across Dependency ...

  7. WPF拖放功能实现zz

    写在前面:本文为即兴而作,因此难免有疏漏和词不达意的地方.在这里,非常期望您提供评论,分享您的想法和建议. 这是一篇介绍如何在WPF中实现拖放功能的短文. 首先要读者清楚的一件事情是:拖放主要分为拖放 ...

  8. POJ2472106 miles to Chicago

    106 miles to Chicago Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3931   Accepted: 1 ...

  9. CF# Educational Codeforces Round 3 F. Frogs and mosquitoes

    F. Frogs and mosquitoes time limit per test 2 seconds memory limit per test 512 megabytes input stan ...

  10. ccc 设置图片位置

    cc.Class({ extends: cc.Component, properties: { player:{ default:null, type:cc.Sprite } }, // use th ...