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表中,并对消息进行解码、拆装并解析参与方,然后将消息转换成后端业务线应用程序的专用格式。其中组件和阶段如下:

  1. RNMiMeDecoder( MIME 预处理器/解码器): 对RNIF2.0e服务内容及附件(如有)进行解密。对于RNIF1.1,对负载末尾的八字节和分离的签名头进行处理。
  2. RNDASM(拆装器,基于XMLdesimber): (1)如果某个传入文档含有 DOCTYPE 头,则本组件根据该头生成一个命名空间,然后将该传入文档中的所有节点移入该命名空间。(2)执行消息相关以确定传入消息是否重复;(3)如果消息重复,则生成错误消息。将附件作为消息的附加部分进行存储。(4)升级消息属性。
  3. RNPartyRes(参与方解析): (1)如果某个 BizTalk 参与方签署了传入消息,则映射发件人证书;如果传入消息未签名,并且该消息是贸易合作伙伴协议允许的,则本组件在 RNIF 2.01 的传递头或 RNIF 1.1 的服务头中检索发件方。(2)请确认发件人存在,并且发件人与本组织有贸易合作伙伴协议。
  4. MessageUpdater:(1)使用以下各项的详细信息更新 MessageStorageIn 表:PIP 代码、PIP 版本、源参与方、目标参与方和线路消息(由 ReceiveMessageNonRepudiate 组件存储)的消息跟踪 ID。 (2)如果 PIP 不要求不可否认性,则将相应记录标记为删除,设置 ToBePurged = True。

4、BTARN 将消息路由至 MessageBox 数据库。

5、公用流程处理消息的 RNIF 头。

  1. 响应方公用流程从响应方 MessageBox 数据库接收 RNIF 消息。
  2. 公用流程从操作消息中提取服务内容和头,并将它们发送到专用流程。 注:响应方公用流程对传入消息执行标准验证(以及验证适配器中包含的其他所有可用验证)。如果验证成功,公用流程将启动应用程序适配器,以便执行与特定的实现相对应的通知。响应方公用流程将在 MessageBox 数据库中保存消息,并通知响应方专用流程它已将消息保存在 MessageBox 数据库中(使用 ApplicationAdapter 类中的 BeginNotify 方法)
  3. 如果活动为异步单操作,则公用流程通过将服务内容消息部分与前导头、服务头和传递头(仅限于 RNIF 2.01)进行包装来构造 RNIF 信号消息(确认接受)。该公用流程使用参与方之间的贸易合作伙伴协议中存储的信息来构造前导头、服务头和传递头,这些信息包括:流程配置设置、源参与方和目标参与方的配置信息以及合作伙伴接口流程 (PIP) 变量。然后流程将信号消息发送到发起方。如果消息为单操作消息,则消息流完成。
  4. 如果是双向流程,公用流程进入等待状态(等待响应方专用流程的操作)。
  5. 以下操作可结束此等待状态:(1)响应方专用流程返回响应服务内容消息和头,以响应原始操作消息(它是双操作消息)。(2)公用流程从发起方接收失败通知 (NoF) 消息。
  6. 响应方公用流程进入等待状态(等待接收来自发起方的信号,以对响应方公用流程发出的响应消息做出响应)

6、专用流程处理消息的服务内容。它将生成一个确认,该确认将依次返回至公用流程、MessageBox 数据库、发送管道和 HTTP 适配器,以便最终通过 Internet 返回至发起方。

  1. 响应方专用流程从响应方公用流程接收路由自发起方计算机的原始传入消息。
  2. 专用流程构造 LOB 应用程序消息。这涉及到获得 LOB 消息模板、序列化 XML 服务内容以及将 XML 消息部分加载到 LOB 消息。
  3. 专用流程将消息路由到 BTARNDATA SQL Server 数据库的 MessagesToLOB 表中,再路由到后端 LOB 应用程序。
  4. 如果原始消息带有附件,则专用流程调用 AttachmentHelper 组件来处理附件。
  5. 专用流程向 LOB 应用程序发送通知,通知此应用程序它将响应消息保存到了 MessagesToLOB 表中。
  6. 如果消息为单操作消息,则专用流程完成。
  7. 如果消息为双操作流程,则专用流程会侦听来自 LOB 应用程序的响应。
  8. 当专用流程接收到来自 LOB 应用程序的响应时,它会构造响应消息,并将此消息发送到公用流程。
  9. 专用流程等待来自公用流程的信号。如果接收到信号,它会构造 LOB 信号消息并将其发送到 LOB 应用程序。如果 RNIF 版本为 1.1,专用流程将侦听第二个确认信号,一旦接收到此确认信号,专用流程将构造 LOB 信号消息并将其发送到 LOB 应用程序。在发送每个信号消息之后,专用流程会通知 LOB 应用程序。
  10. 如果专用流程从公用流程接收到路由自发起方的“失败通知”(NoF) 消息,则专用流程会构造“BTARNException”消息并将其发送到 LOB 应用程序。 ## 7、BTARN 将消息路由至 MessageBox 数据库。 ## 8、发送管道对消息进行组装,然后签名/加密/编码,发送管道将发送的消息存储在MessageStorageOut表中。
  11. 如果贸易合作伙伴协议中的“将所有部分编码”设置为 True,则 MIME/SMIME 编码器将对所有消息部分进行编码。所用的编码方法是在该协议的 Encoding 属性中设置的。
  12. 对于 RNIF 2.01,如果消息是操作消息并带有附件,则编码器将对每个附件执行以下操作:(1)如果附件是二进制的,则编码器将对其进行编码。(2)编码器将生成该附件的内容 ID。(3)编码器将创建该附件的 MIME 部分。
  13. 对于 RNIF 2.01,该管道将根据“是否要求永久保密”设置(按照流程配置设置中的设置)对消息部分进行加密并生成 RNIF 消息:(1)如果将“是否要求永久保密”设置为“负载”,则编码器将对服务内容和附件进行加密。然后,组装器添加服务头、传递头和前导头以构造最终的 RNIF 消息。(2)如果将“是否要求永久保密”设置为“负载容器”,则编码器将对服务头、服务内容和附件进行加密。然后,组装器添加传递头和前导头以构造最终的 RNIF 消息。(3)如果将“是否要求永久保密”设置为“无”,则组装器将服务头、传递头和前导头添加到服务内容和附件中(不加密),以构造最终的 RNIF 消息。
  14. 对于 RNIF 1.1,组装器将构造不加密的最终 RNIF 消息。
  15. 编码器在以下情况对消息进行签名(如有) ## 9、通过发送ASPX页发送消息出去
  16. 发送页对消息进行验证。
  17. 发送页根据消息的内容类型、长度、ID 和多用途 Internet 邮件扩展 (MIME) 版本创建 MIME 头。该页将 MIME 头和 MIME 上下边界添加到消息中。
  18. 发送页使用 HTTP Post 按照贸易合作伙伴协议中操作 URL 或信号 URL 设置设定的位置将消息发送到合作伙伴的目标 URL。
  19. 然后发送页等待 HTTP 响应。接收到响应后,它将该响应路由到 HTTP 适配器。
  20. 如果连接是异步的,发送页将关闭连接,处理过程完成。
  21. 如果连接是同步的,发送页将保持连接的开通以接收返回的消息。发送页在收到消息以后执行的处理与 RNIFReceive.aspx 对所收到消息的处理相同,然后,发送页将收到的消息发送到 HTTP 适配器,最后关闭连接。

参考文档

BizTalk Accelerator for RosettaNet 如何工作

BTARN 接收消息流以3A7为例的更多相关文章

  1. RabbitMQ 入门系列:3、基础编码:官方SDK的引用、链接创建、单例改造、发送消息、接收消息。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  2. MQTT协议笔记之消息流

    前言 前面的笔记已把所有消息类型都过了一遍,这里从消息流的角度尝试解读一下. 网络故障 在任何网络环境下,都会出现一方连接失败,比如离开公司大门那一刻没有了WIFI信号.但持续连接的另一端-服务器可能 ...

  3. Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)

    最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很 ...

  4. 【Spring】使用Spring和AMQP发送接收消息(中)

    上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bea ...

  5. RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)

    ===================================================== RTMPdump(libRTMP) 源代码分析系列文章: RTMPdump 源代码分析 1: ...

  6. SNF开发平台WinForm-审核流使用方法样例

    一.效果如下: 二.如何实现 1.程序的数据表设计规范,参考<09.SNF-C#编程规范V1.5.docx>文件. 2.程序操作程序 2.1.在程序页面拖拽控件 2.2.程序的Load事件 ...

  7. Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组

    不多说,直接上干货! Stream消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列. Stream Grouping 消息流组是用来定义一个流如何分配到Tuple到Bolt. Stre ...

  8. .net core 消息流处理流程

    前言 2020年即将进入尾声,分享一下在现公司业务处理流程,一起讨论在分布式场景下,如何通过消息流的方式处理各种复杂的业务场景,这里涉及到一些常用组件,后面结合场景与代码来具体说明 场景说明 这里就拿 ...

  9. RabbitMQ 入门 (Go) - 2. 发布和接收消息

    本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...

随机推荐

  1. 004.MySQL双主+Keepalived高可用

    一 基础环境 主机名 系统版本 MySQL版本 主机IP Master01 CentOS 6.8 MySQL 5.6 172.24.8.10 Master02 CentOS 6.8 MySQL 5.6 ...

  2. 不一样的go语言-error

    前言   go语言的error处理方式,在目前流行的编程语言中属于刺头.似乎天生就是用来有别于他人标记.TIOBE排行榜全十除了C语言,无一例外是try catch的阵营.而排在go之前的语言除了C与 ...

  3. RedisCacheManager设置Value序列化器技巧

    CacheManager基本配置 请参考博文:springboot2.0 redis EnableCaching的配置和使用 RedisCacheManager构造函数 /** * Construct ...

  4. asp.net core 上使用redis探索(3)--redis示例demo

    由于是基于.net-core平台,所以,我们最好是基于IDistributedCache接口来实现.ASP.NET-CORE下的官方redis客户端实现是基于StackExchange的.但是官方提供 ...

  5. VMware5.5-高可用性和动态资源调度(DRS)

    高可用性 故障分类:ESX主机---虚拟机(主机通过vmtools监控)---应用程序(基本不用6.0新增了这一功能) 高可用的信号检测目前可分为两种 一.网络信号 二.存储信号 新建群集 上图的自定 ...

  6. 英语口语练习系列-C33-露营-谈论日期-离思

    词汇-露营 Camping camping 露营 campground camping camper picnic bonfire backpack tent public campground co ...

  7. SolidWorks基础-快速入门

    SolidWorks 介绍 SolidWorks 是一款机械设计自动化软件包 用于设计与分析机械结构 SolidWorks主要是工程师表达自己思想的工具 学习 SolidWorks 的方法 找一个基础 ...

  8. 高速公路 [HAOI2012] [线段树]

    Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站. Y901高速公路是一条由N-1段路以及N个 ...

  9. 前端语言生成apk

    https://www.cnblogs.com/softcg/p/6511030.html

  10. 3ds max学习笔记(十一)-- 修改器

    1.修改器列表: 将常用的修改器放放置在集里: 1.点击[配置]按钮,勾选[显示按钮] 选择[配置修改器集],在新出的弹窗里通过左右拖拽进行设置: 2,选择之后,点击[确定]进行保存: