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 适配器,最后关闭连接。