BizTalk 是高效的消息处理引擎,采用多线程并发的方式来处理消息。也就是说当有消息被接收的时候就会产生一个新的消息处理实例。但有时目标系统可能并没有并发处理 的能力, 这时就需要在BizTalk中采用单实例的方式来处理消息。在BizTalk的管道中直接可以启用按序送达的方式来实现, 但是在Orchestration中并没有提供类似的选项.该如何做到呢?

其实在BizTalk中可以根据设置消息的Correlation Set也就是相关属性来实现这样的效果。也就是第一条消息进来之后创建一个Orchestration实例,并且初始化相关集,接下来接收到的消息,如果 有相同的相关集的话都会由相同的Orchestration实例来处理而不会创建新的Orchestration实例。

接下来就来实现这样的一个Demo

首先创建Schema,创建完之后新建Orchestration并创建相应的消息。接下来参照下图在Orchestration中画出相应的图形:

绑定相应的消息到Receive, Send形状中,并连接接收与发送形状及端口。本Demo中没有对消息进行转换。只是实现端到端的消息传递而已。

到目前为止整个流程已经基本建完了。不过现在还不能实现之前预想的功能。还需要做下面关键的一步: 创建和设置Correlation

1. 在 Orchestration View的Type类型的Correlation Types里创建Correlation Type.本Demo实现的是以某个Receive Port接收到的消息作标识.此选择Correlation Properlity属性要选择BTS.ReceivePortName

2. 接着创建Correlation Set. 在Orchestration View的TransferOrch中创建.

3. Correlation Set创建好之后需要做两部分操作一个是初始化.注意在一个Orchestration里面Correlation Set只能被初始化一次。因此。在本流程中。将Receive_1的Initializing Correlation Sets设置为刚才设置的Correlation Set。

4. 在Receive_2的Following Correlation Sets设置为刚才设置的Correlation Set

至此Singleton Orchestration已经设计好了。给程序集完成程序签名、部署和设置之后来看看实际运行的效果。

接收端口会批量接收消息(当然这里你可以选择按序接收)。第一个消息进行Orchestration之后会先创建Orchestration实例。 接下来的消息会使用原有的Orchestration 实例进行处理。当然消息必须是来自于同一个接收端口。这也是之前我们设定的Correlation。

上图为BizTalk运行时的日志信息,从日志中我们可以更清楚的看到BizTalk的处理过程, 若要重新让Orchestration初始化实例,则需要重新启动BizTalk 项目。

BizTalk开发系列(三十六) Orchestration单实例执行的更多相关文章

  1. BizTalk开发系列(三十五) TCP/IP 适配器

    BizTalk 的TCP/IP适配器最初是为英国的保健行业开发.该适配器属于BizTalk进程内适配器,将消息通过TCP/IP 套接字符串在BizTalk服务器与远程客户端间进行通讯. TCP/IP适 ...

  2. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  3. BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]

    做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...

  4. BizTalk开发系列(三十二)浅谈BizTalk主机性能优化

    很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率, ...

  5. BizTalk开发系列(二十六) 使用Web Service

    Web Service是在构建SOA平台中广泛使用的技术.在BizTalk开发过程中使用SOAP适配器接收和发送 Web Services 请求.业务流程可以发布为 Web Services 并使用外 ...

  6. BizTalk开发系列(三十四) Xpath

    XPath 是在 XML 文档中查找信息的语言,在BizTalk的开发中应用非常广泛,当然你可以不必先学Xpath再去学BizTalk.但是如果对Xpath有一定了解的 话,在很多应用下会使你的开发更 ...

  7. BizTalk开发系列(三十)单向端口实现请求-响应

    BizTalk本质上是异步的消息处理引擎.BizTalk的请求与响应模式是基于异步之上的同步消息交换.消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息.例如,客户端发送一个 ...

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

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

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

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

随机推荐

  1. Visual Studio vs软件下载 vax Visual Assist X VAssistX

    Visual_Studio_2008_Team_Suite简体中文正式版及补丁下载链接:http://pan.baidu.com/s/1jGvOotg 密码:y6ic Visual Studio 20 ...

  2. AndroidTips:解决Dialog全屏显示以及Dialog显示自动弹出输入法

    继承实现一个dialog,并在onCreate里面做处理. @Override  protected void onCreate(Bundle savedInstanceState) {      s ...

  3. SQL初级第三课(下)

    我们续用第三课(上)的表 辅助表 Student                   Course               Score                    Teacher Sno ...

  4. The Unique MST(次小生成树)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22335   Accepted: 7922 Description Give ...

  5. [转] FastMM、FastCode、FastMove的使用

    http://blog.csdn.net/akof1314/article/details/6524767 FastMM是一个替换Embarcadero Delphi Win32应用程序的快速内存管理 ...

  6. Android service介绍和启动方式

    1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...

  7. 关于把世界坐标投射到屏幕上转换为屏幕2D坐标

    如果使用使用Project World to Screen 在一些分辨率一下就出现坐标错误. 比如我设置的UMG分辨率为1280*720,但是他的(1280,720)的坐标并不在UMG的右下角的边缘上 ...

  8. EF框架step by step(7)—Code First DataAnnotations(2)

    上一篇EF框架step by step(7)—Code First DataAnnotations(1)描述了实体内部的采用数据特性描述与表的关系.这一篇将用DataAnnotations描述一下实体 ...

  9. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  10. 类型“System.Windows.Markup.IQueryAmbient”在未被引用的程序集中定义

    错误    1    类型"System.Windows.Markup.IQueryAmbient"在未被引用的程序集中定义.必须添加对程序集"System.Xaml, ...