BizTalk开发系列(三十)单向端口实现请求-响应
BizTalk本质上是异步的消息处理引擎。BizTalk的请求与响应模式是基于异步之上的同步消息交换。消息引擎通过消息的扩展架构链接许 多异步消息,消息的相关集关联请求与响应消息。例如,客户端发送一个SOAP请求到BizTalk SOAP适配器。连接该Web Service的BizTalk Orchestration接收处理消息。并返回一个SOAP响应消息。对于客户端程序来说是一个同步的SOAP请求。但在引擎内部则是通过并联交换许多 的异步消息来实现。
以下是请求-响应模式中的五个架构属性:
- BTS.CorrelationToken 允许响应消息路由到请求-响应端口。
- BTS.EpmRRCorrelationToken 用于内部的消息引擎指定请求-响应消息流的服务器名称,处理ID和唯一的GUID。
- BTS.IsRequestResponse 指定是否是请求-响应消息
- BTS.ReqRespTransmitPipelineID
- BTS.RouteDirectToTp 用于内部消息引擎允许循环回调请求-响应消息。
基于以上介绍大概了解了双向端口(请求-响应模式)在BizTalk内部的交换原理,我们的想法是通过单向端口来实现双向端口的功能,理论上大体 是这样的:创建一个单向端口接收来自Web Service的请求,在Orchestration中通过消息属性订阅消息,Orchestration接到消息之后处理消息,比如创建一个同样的消息 (拷贝相应的属性),并修改相应字段的值。新的消息通过发送形状发布到MessageBox中,并初始化相关集。消息引擎根据消息的相关集设置将消息返回 给请求与响应端口。
下图是根据理论分析创建的流程图,流程图非常的简单,接收与发送端口都是使用Direct端口类型Receive接收形状使用Filter从Messagebox从MessageBox订阅消息。Send发送形状则是将消息发布到Messagebox。
![]()
在Construct New Message形状里的表达式语句如下,通过创建新的消息并指定相关集的值。
System.Diagnostics.EventLog.WriteEntry("TwoWayDemo","Begin Process");
OutMsg = InMsg;
OutMsg(*) = InMsg(*);
OutMsg.Body.Field="cbcye@live.com";
OutMsg.Header.State="Completed";
OutMsg(BTS.RouteDirectToTP)=true;
System.Diagnostics.EventLog.WriteEntry("TwoWayDemo","Completed Process");
BizTalk项目部署之后需要将Schema发布为Web
Service.并在BizTalk应用程序中创建接收端口,由于Orchestration是通过属性订阅消息所以需要在SOAP接收位置中使用XML
Receive Pipeline。最后我们通过soapUI测试Web
Service可以看到我们的SOAP请求已经的成功的被Orchestration处理并返回处理结果。
![]()
总结
以上简单的Demo涉及到的BizTalk相关知识比较多比如发布/订阅机制,相关集,SOAP 适配器的使用等。不过理解该Demo相信对于BizTalk的架构领会是一个不小的跨越。最后说明一点这里所指的单向端口是指Orchestration中的单向端口。Web Service发布的端口是双向的。
参考资料
《Microsoft BizTalk 2006 R2 Documentation》
《ESB Guidance Documentation》
BizTalk开发系列(三十)单向端口实现请求-响应的更多相关文章
- BizTalk开发系列(三十五) TCP/IP 适配器
BizTalk 的TCP/IP适配器最初是为英国的保健行业开发.该适配器属于BizTalk进程内适配器,将消息通过TCP/IP 套接字符串在BizTalk服务器与远程客户端间进行通讯. TCP/IP适 ...
- BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]
做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...
- BizTalk 开发系列(三十九) BizTalk Server 2009技术概览
BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...
- BizTalk开发系列(三十六) Orchestration单实例执行
BizTalk 是高效的消息处理引擎,采用多线程并发的方式来处理消息.也就是说当有消息被接收的时候就会产生一个新的消息处理实例.但有时目标系统可能并没有并发处理 的能力, 这时就需要在BizTalk中 ...
- BizTalk开发系列(三十四) Xpath
XPath 是在 XML 文档中查找信息的语言,在BizTalk的开发中应用非常广泛,当然你可以不必先学Xpath再去学BizTalk.但是如果对Xpath有一定了解的 话,在很多应用下会使你的开发更 ...
- BizTalk开发系列(三十二)浅谈BizTalk主机性能优化
很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率, ...
- BizTalk开发系列(二十八) MSMQ 适配器
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间 中的任一 ...
- BizTalk开发系列(三十三)BizTalk之Excel终极解决方案
Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapte ...
- BizTalk开发系列(二十二) 开发自定义Map Functoid
尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...
随机推荐
- Delphi7 客户端调用WebService(天气预报)
客户程序:第一步:新建一个Application. 第二步:File----->New----->Other------>WebServices----->WSDL Impor ...
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- Android自动化测试 - Robotium之Robotium在不同分辨率下clickonview不支持解决方案
使用Robotium中的clickonview方法进行点击操作时,可能在你本机上能够顺利执行,但把脚本移植到不同分辨率的设备下却有可能点不到控件的情况. 网上找了一些资料,基本一条语句可以搞定: 在m ...
- Codeforces 682B New Skateboard(DP)
题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除. dp[i][m]表示字符串0...i中mod 4为m的后缀的个数 通过在i-1添加str[i]字符转移,或者以st ...
- 两个app 的合并
我们需要把两个app 合并在一起,就是在原有项目基础上添加一个功能使用.如下有项目a和项目b: 一开始,我们把项目b独立成一个module,然后,作为一个库给项目a调用. 问题是,项目b 已有的app ...
- 03_Swift2基础之基本数据类型+相互转换
1. 整数 整数就是没有小数部分的数字,比如`42`和`-23`.整数可以是`有符号`(正.负.零)或者`无符号`(正.零). Swift 提供了,,和位的有符号和无符号整数类型.这些整数类型和 C语 ...
- Storm分布式实时流计算框架相关技术总结
Storm分布式实时流计算框架相关技术总结 Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍.以此为基础,后续再深入了解S ...
- 降噪自动编码器(Denoising Autoencoder)
起源:PCA.特征提取.... 随着一些奇怪的高维数据出现,比如图像.语音,传统的统计学-机器学习方法遇到了前所未有的挑战. 数据维度过高,数据单调,噪声分布广,传统方法的“数值游戏”很难奏效.数据挖 ...
- HDU3068最长回文 题解
题目大意: 求字符串的最长回文子串的长度. 思路: Manacher板题,Hash可能会T.要学习Manacher,可参考https://www.felix021.com/blog/read.php? ...
- javascript new function()
// 执行的func生成一个空对象,如果有return就会把生成的func对象抛弃function func() {} alert(temp instanceof func) function fun ...