处理传入 AS2 消息

AS2 接收管道处理通过 AS2 传入的消息。 AS2EdiReceive 接收管道使用 EDI 解析器来处理 EDI 编码消息。 AS2Receive 接收管道使用 AS2 解析器来处理非 EDI 编码消息。 这两个管道处理 AS2 消息的有效负载,并以不同的方式生成 MDN;但是,这两个接收管道都使用 AS2 解码器来处理 AS2 消息。

当 AS2EdiReceivePipeline 处理具有 EDI 有效负载的 AS2 消息时,它会在执行 EDI 处理之前完成接收消息的 AS2 处理。 当流程为 AS2 消息的 EDI 内容生成 EDI 确认时,它必须以异步方式返回 EDI 确认,因为连接会被 AS2 响应关闭。

接收端口

HTTP 接收端口用于接收具有 EDI 或非 EDI 有效负载的 AS2 消息。 如果必须同步返回 MDN,则接收端口必须是请求响应端口。

MDN 可以同步或异步返回。 这由 AS2 消息的处置通知-到标头确定,除非在“协议属性”对话框的单向 AS2 协议选项卡中选择了“使用协议设置进行验证和 MDN 而不是使用消息标头”属性。 如果选择了该属性,则 MDN 的返回方式由“协议属性”对话框的单向 AS2 协议选项卡的“发送方 MDN 设置”页中的“请求异步 MDN”属性确定。 有关详细信息,请参阅 AS2 消息MDN 消息

如果 MDN 是同步返回的,那么它将通过双向接收位置的发送端口返回。 此 MDN 充当 HTTP 响应,例如,指示成功接收消息的 200OK。

如果 MDN 将以异步方式返回,则必须通过单独的发送端口返回 MDN。 如果使用动态发送端口,MDN 将发送到 Disposition-notification-to 标头中包含的地址。

注释

用于接收 AS2 消息的双向接收端口不应用于接收 MDN 消息。 应在静态单向接收端口上接收 MDN 消息。 使用请求/响应接收端口来处理异步返回的 MDN,可以避免在回应传入的 MDN 时返回 200OK 消息,从而导致不必要的 MDN 传输重试。

AS2 接收管道的工作原理

AS2 接收管道在处理传入 AS2 消息时执行的步骤如下所示:

  • 通过将邮件的 AS2 标头中的 AS2-From 值与“协议属性”对话框的单向 AS2 协议选项卡的“标识符”页中 AS2-From 列表的值相匹配来确定发送方。 如果失败,则尝试通过将传入消息的 AS2-From 上下文属性与参与方名称相匹配来确定发送方。 如果找到匹配项,并在“协议属性”对话框的“单向 AS2 协议”选项卡中选择了使用协议设置用于验证和 MDN 来替代消息标头属性,那么 BizTalk Server 将使用与协议关联的 AS2 属性来处理 AS2 消息。 如果未选择该属性,接收管道将使用传入消息中的 AS2 标头标记。 如果未找到协议,管道将中止处理,暂停消息,并引发异常。

    注释

    使用用于验证和 MDN 的协议设置(而不是消息标头属性)可以验证传入消息是否具有签名、加密和压缩属性(如果在单向协议的“验证”选项卡中指定了这些属性),如果不是,则暂停消息并发布错误。 与发送方协议协商这项更改是必须的。 有关详细信息,请参阅 配置 AS2 属性

  • 如果确定发送方协议,但在接收管道尝试处理 AS2 消息时会出现错误,则管道会将 AS2 消息的上下文属性 MessageDestination 设置为 SuspendQueue。 然后,接收管道将挂起 MessageBox 中的消息。 接收管道还将上下文属性设置为 EdiIntAS.IsAS2FailedMessage True。 如果通过在“协议属性”对话框的单向 AS2 协议选项卡的“发送方 MDN 设置”页中设置“请求 MDN”来启用 MDN,则管道将向发送方返回相应的 MDN。 如果请求 MDN,管道将始终尝试返回该 MDN。

  • 确定消息是否重复,如果在“协议属性”对话框的单向 AS2 协议选项卡的“验证”页中选择了“检查重复消息”选项。 重复的消息检测是通过将入站消息上的 AS2-From、AS2-To 和 Message-ID 值匹配为以前接收的消息的值来实现的。 如果这三个值都匹配,则接收管道会将上下文属性的值 EdiIntAs.IsAS2MessageDuplicate 设置为 true。 如果在验证页面上也选择了挂起重复消息选项,该消息将被暂停并记录错误。

  • 检索每个附件的文件名(如果有)并将其提升到上下文属性。

  • 如果在单向 AS2 协议属性中启用,则会创建消息的副本(以线格式),并将该副本存储在不可否认的收据数据库中。

  • 执行 MIME 处理,包括验证签名和解密消息(基于标头标记)。

  • 解压缩收到的消息(如果已压缩)。

  • 生成 HTTP 响应,在同步请求响应模式下追加到 MDN,或在异步模式下作为独立响应发送。

  • 如果请求,则生成 MDN 响应。 如果已设置 用于验证和 MDN 的协议设置而不是消息标头 属性,则管道将基于协议属性生成 MDN;如果未设置该属性,则将基于上下文属性生成 MDN。 如果传入消息中的配置设置和标头不一致,管道将生成负 MDN。

  • 如果消息是 EDI 编码的,并启用了确认,则 AS2EdiReceive 接收管道中的 EDI 反汇编程序将生成 EDI 确认。 管道会将 EDI 确认路由到 MessageBox,动态发送端口将从中选取它并异步发送。 EDI 确认始终通过 AS2 传输异步发送,因为 MDN 或 HTTP 响应是同步发送的。

  • 生成 MDN 的副本,并将其存储在不可否认的收据数据库中,如果在单向 AS2 协议属性中启用。

  • 创建解码消息的副本,并在单向 AS2 协议属性中启用时,将副本存储在不可抵赖回执数据库中。

    如果发生 AS2 错误,系统不会对接收的消息进行进一步处理。 但是,接收管道仍将生成 MDN 响应。

另请参阅

BizTalk Server 如何接收 AS2 消息
AS2 消息
MDN 消息