BTARN 接收消息流以3A7为例

1、RNIFReceive.aspx 页接收来自发起方的传入消息。
(如果发起方是BizTalk则类似于:http://localhost/BTARNApp/RNIFSend.aspx?TPUrl=https://&xRNVersion=RosettaNet%%2fV02.00&xRNResponseType=async 的形式进行调用),如果使用HTTPS会话的话发起方会用自己的私钥和对方的公钥加密数据,所以中间不能有代理服务器的证书否则会失败。
2、RNIFReceive.aspx会调用BTARN的SDK将消息提交给HTTP适配器,HTTP 适配器再将其提交给接收管道。
3、接收管道将接收到的消息存储在MessageStorageIn表中,并对消息进行解码、拆装并解析参与方,然后将消息转换成后端业务线应用程序的专用格式。其中组件和阶段如下:
- RNMiMeDecoder( MIME 预处理器/解码器): 对RNIF2.0e服务内容及附件(如有)进行解密。对于RNIF1.1,对负载末尾的八字节和分离的签名头进行处理。
- RNDASM(拆装器,基于XMLdesimber): (1)如果某个传入文档含有 DOCTYPE 头,则本组件根据该头生成一个命名空间,然后将该传入文档中的所有节点移入该命名空间。(2)执行消息相关以确定传入消息是否重复;(3)如果消息重复,则生成错误消息。将附件作为消息的附加部分进行存储。(4)升级消息属性。
- RNPartyRes(参与方解析): (1)如果某个 BizTalk 参与方签署了传入消息,则映射发件人证书;如果传入消息未签名,并且该消息是贸易合作伙伴协议允许的,则本组件在 RNIF 2.01 的传递头或 RNIF 1.1 的服务头中检索发件方。(2)请确认发件人存在,并且发件人与本组织有贸易合作伙伴协议。
- MessageUpdater:(1)使用以下各项的详细信息更新 MessageStorageIn 表:PIP 代码、PIP 版本、源参与方、目标参与方和线路消息(由 ReceiveMessageNonRepudiate 组件存储)的消息跟踪 ID。 (2)如果 PIP 不要求不可否认性,则将相应记录标记为删除,设置 ToBePurged = True。
4、BTARN 将消息路由至 MessageBox 数据库。
5、公用流程处理消息的 RNIF 头。
- 响应方公用流程从响应方 MessageBox 数据库接收 RNIF 消息。
- 公用流程从操作消息中提取服务内容和头,并将它们发送到专用流程。 注:响应方公用流程对传入消息执行标准验证(以及验证适配器中包含的其他所有可用验证)。如果验证成功,公用流程将启动应用程序适配器,以便执行与特定的实现相对应的通知。响应方公用流程将在 MessageBox 数据库中保存消息,并通知响应方专用流程它已将消息保存在 MessageBox 数据库中(使用 ApplicationAdapter 类中的 BeginNotify 方法)
- 如果活动为异步单操作,则公用流程通过将服务内容消息部分与前导头、服务头和传递头(仅限于 RNIF 2.01)进行包装来构造 RNIF 信号消息(确认接受)。该公用流程使用参与方之间的贸易合作伙伴协议中存储的信息来构造前导头、服务头和传递头,这些信息包括:流程配置设置、源参与方和目标参与方的配置信息以及合作伙伴接口流程 (PIP) 变量。然后流程将信号消息发送到发起方。如果消息为单操作消息,则消息流完成。
- 如果是双向流程,公用流程进入等待状态(等待响应方专用流程的操作)。
- 以下操作可结束此等待状态:(1)响应方专用流程返回响应服务内容消息和头,以响应原始操作消息(它是双操作消息)。(2)公用流程从发起方接收失败通知 (NoF) 消息。
- 响应方公用流程进入等待状态(等待接收来自发起方的信号,以对响应方公用流程发出的响应消息做出响应)
6、专用流程处理消息的服务内容。它将生成一个确认,该确认将依次返回至公用流程、MessageBox 数据库、发送管道和 HTTP 适配器,以便最终通过 Internet 返回至发起方。
- 响应方专用流程从响应方公用流程接收路由自发起方计算机的原始传入消息。
- 专用流程构造 LOB 应用程序消息。这涉及到获得 LOB 消息模板、序列化 XML 服务内容以及将 XML 消息部分加载到 LOB 消息。
- 专用流程将消息路由到 BTARNDATA SQL Server 数据库的 MessagesToLOB 表中,再路由到后端 LOB 应用程序。
- 如果原始消息带有附件,则专用流程调用 AttachmentHelper 组件来处理附件。
- 专用流程向 LOB 应用程序发送通知,通知此应用程序它将响应消息保存到了 MessagesToLOB 表中。
- 如果消息为单操作消息,则专用流程完成。
- 如果消息为双操作流程,则专用流程会侦听来自 LOB 应用程序的响应。
- 当专用流程接收到来自 LOB 应用程序的响应时,它会构造响应消息,并将此消息发送到公用流程。
- 专用流程等待来自公用流程的信号。如果接收到信号,它会构造 LOB 信号消息并将其发送到 LOB 应用程序。如果 RNIF 版本为 1.1,专用流程将侦听第二个确认信号,一旦接收到此确认信号,专用流程将构造 LOB 信号消息并将其发送到 LOB 应用程序。在发送每个信号消息之后,专用流程会通知 LOB 应用程序。
- 如果专用流程从公用流程接收到路由自发起方的“失败通知”(NoF) 消息,则专用流程会构造“BTARNException”消息并将其发送到 LOB 应用程序。 ## 7、BTARN 将消息路由至 MessageBox 数据库。 ## 8、发送管道对消息进行组装,然后签名/加密/编码,发送管道将发送的消息存储在MessageStorageOut表中。
- 如果贸易合作伙伴协议中的“将所有部分编码”设置为 True,则 MIME/SMIME 编码器将对所有消息部分进行编码。所用的编码方法是在该协议的 Encoding 属性中设置的。
- 对于 RNIF 2.01,如果消息是操作消息并带有附件,则编码器将对每个附件执行以下操作:(1)如果附件是二进制的,则编码器将对其进行编码。(2)编码器将生成该附件的内容 ID。(3)编码器将创建该附件的 MIME 部分。
- 对于 RNIF 2.01,该管道将根据“是否要求永久保密”设置(按照流程配置设置中的设置)对消息部分进行加密并生成 RNIF 消息:(1)如果将“是否要求永久保密”设置为“负载”,则编码器将对服务内容和附件进行加密。然后,组装器添加服务头、传递头和前导头以构造最终的 RNIF 消息。(2)如果将“是否要求永久保密”设置为“负载容器”,则编码器将对服务头、服务内容和附件进行加密。然后,组装器添加传递头和前导头以构造最终的 RNIF 消息。(3)如果将“是否要求永久保密”设置为“无”,则组装器将服务头、传递头和前导头添加到服务内容和附件中(不加密),以构造最终的 RNIF 消息。
- 对于 RNIF 1.1,组装器将构造不加密的最终 RNIF 消息。
- 编码器在以下情况对消息进行签名(如有) ## 9、通过发送ASPX页发送消息出去
- 发送页对消息进行验证。
- 发送页根据消息的内容类型、长度、ID 和多用途 Internet 邮件扩展 (MIME) 版本创建 MIME 头。该页将 MIME 头和 MIME 上下边界添加到消息中。
- 发送页使用 HTTP Post 按照贸易合作伙伴协议中操作 URL 或信号 URL 设置设定的位置将消息发送到合作伙伴的目标 URL。
- 然后发送页等待 HTTP 响应。接收到响应后,它将该响应路由到 HTTP 适配器。
- 如果连接是异步的,发送页将关闭连接,处理过程完成。
- 如果连接是同步的,发送页将保持连接的开通以接收返回的消息。发送页在收到消息以后执行的处理与 RNIFReceive.aspx 对所收到消息的处理相同,然后,发送页将收到的消息发送到 HTTP 适配器,最后关闭连接。
参考文档
BizTalk Accelerator for RosettaNet 如何工作
BTARN 接收消息流以3A7为例的更多相关文章
- RabbitMQ 入门系列:3、基础编码:官方SDK的引用、链接创建、单例改造、发送消息、接收消息。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- MQTT协议笔记之消息流
前言 前面的笔记已把所有消息类型都过了一遍,这里从消息流的角度尝试解读一下. 网络故障 在任何网络环境下,都会出现一方连接失败,比如离开公司大门那一刻没有了WIFI信号.但持续连接的另一端-服务器可能 ...
- Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)
最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很 ...
- 【Spring】使用Spring和AMQP发送接收消息(中)
上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bea ...
- RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)
===================================================== RTMPdump(libRTMP) 源代码分析系列文章: RTMPdump 源代码分析 1: ...
- SNF开发平台WinForm-审核流使用方法样例
一.效果如下: 二.如何实现 1.程序的数据表设计规范,参考<09.SNF-C#编程规范V1.5.docx>文件. 2.程序操作程序 2.1.在程序页面拖拽控件 2.2.程序的Load事件 ...
- Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组
不多说,直接上干货! Stream消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列. Stream Grouping 消息流组是用来定义一个流如何分配到Tuple到Bolt. Stre ...
- .net core 消息流处理流程
前言 2020年即将进入尾声,分享一下在现公司业务处理流程,一起讨论在分布式场景下,如何通过消息流的方式处理各种复杂的业务场景,这里涉及到一些常用组件,后面结合场景与代码来具体说明 场景说明 这里就拿 ...
- RabbitMQ 入门 (Go) - 2. 发布和接收消息
本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...
随机推荐
- Git 日常工作中使用的命令记录
前言 这篇文章主要是介绍我在使用Git中的有一些忘记了,但是很重要的命令. 20190424 Git 历史信息 username 和 email 更改 git config alias.chang ...
- Windows下MySQL绿色版安装配置与使用
Mysql-5.7.11-winx64操作步骤: 一.安装MySQL数据库 1.下载. 下载地址: http://downloads.mysql.com/archives/get/file/mysql ...
- Linux下 nfs部署
一. 挂载一个硬盘来分享 二. 更改配置文件 三. 在配置文件中设置属性 四. 另一台机器 配置的虚拟机,将nfs关闭 配置文件也删除内容 挂载 挂载到部署nfs的极其 之 ...
- [Web]flask-excel实现excel文件下载的前后端实现
之前同事写了前端表格导出的功能, 前后端逻辑没有梳理, 导致后端代码十分臃肿. 接手之后, 重新选择了前端table插件, 从jqxGrid变更为bootstrapTable. 本来想依赖集成的tab ...
- 连接到docker 指定的一个容器中
1.docker run -itd ubuntu 2.sudo docker ps 3.PID=$(docker-pid containerID) 返回一个p_id 4.nsenter --targ ...
- js数组根据指定字段(true or false)排序
const obj = [ {name:'1',bind:true}, {name:'2',bind:false}, {name:'3',bind:true}, {name:'4',bind:fals ...
- 32位系统和x86的关系?
32位操作系统针对32位CPU设计,cpu的位是指一次性可处理的数据量是多少,也等于寻址空间的大小或是通用寄存器的大小,一般数据总线的宽度也和cpu位数相同,但也有例外(如8088数据总线宽度为8然而 ...
- 关于git的使用记录总结
1.解决Windows下git换行符报警问题 git config --global core.autocrlf false 2.撤销add的文件退出暂存区 git reset --mixed 3.g ...
- python网络编程(十一)
epoll版-TCP服务器 1. epoll的优点: 没有最大并发连接的限制,能打开的FD(指的是文件描述符,通俗的理解就是套接字对应的数字编号)的上限远大于1024 效率提升,不是轮询的方式,不会随 ...
- js实现60s倒计时效果
适用于获取验证码等其他场景,下面代码直接粘贴句可以使用 // 60s获取验证码的js与html var timer = null; var count = 60; $('.box>button' ...