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. 大数据小白系列——MR(1)

    一部编程发展史就是一部程序员偷懒史,MapReduce(下称MR)同样是程序员们用来偷懒的工具. 来了一份大数据,我们写了一个程序准备分析它,需要怎么做? 老式的处理方法不行,数据量太大时,所需的时间 ...

  2. python request 库

    快速上手 迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: Requests 已安装 Req ...

  3. 《重回耶路撒冷——犹太人的三千年》(Return to Jerusalem)读后感

    写在前面 书名:<重回耶路撒冷——犹太人的三千年>(Return to Jerusalem) 作者:张力升 来源:长清图书馆 阅读用时:其实年前拿到书,本来想寒假在家看的,但是在家一点儿都 ...

  4. 网络基础配置--usg系统升级

    1.usg2000系统升级 1.1.TFTP设置 这里用到一个工具:3CDeamon, 是在由3Com开发类别 Web Development Freeware 软件,是一个简易服务器工具,含TFTP ...

  5. 【DWM1000】 code 解密10 一 TAG 发送最后一个消息

    更上面ANCHOR发送信息时的RTLS_DEMO_MSG_ANCH_RESP, 我们很快就可以找到如下代码 case RTLS_DEMO_MSG_ANCH_RESP: { 这里面一部分是设置重要变量, ...

  6. 潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)

    g更改标签:,前台要向后台传来 id, name, 对标签进行校验:标签不能为空,标签是否已经存在, 流程: def put(self, request, tag_id): ''' 更改标签 :par ...

  7. Django复习2

    一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python man ...

  8. Conscription [POJ3723] [最小生成树]

    Description: Windy有一个国家,他想建立一个军队来保护他的国家. 他召集了N个女孩和M男孩,想把他们雇佣成为他的士兵. 要无偿雇佣士兵,必须支付10000元. 女孩和男孩之间有一些关系 ...

  9. LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)

    题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+.. ...

  10. Windows10关机问题----只有“睡眠”、“更新并重启”、“更新并关机”,但是又不想更新,解决办法

    最近的一个问题,电脑关机的时候发现,只有“睡眠”.“更新并重启”.“更新并关机” 内心很是煎熬.... 尝试了N种方式,然后总结如下: 第一种方式:(表示自己window的系统用着挺好,力荐) 1.打 ...