处理传入 AS2 消息

AS2 接收管道可处理通过 AS2 传入的消息。 AS2EdiReceive 接收管道使用 EDI 拆装器处理 EDI 编码的消息。 AS2Receive 接收管道使用 AS2 拆装器处理非 EDI 编码的消息。 这两个管道采用不同的方式来处理 AS2 消息负载和生成 MDN;不过,两个接收管道都使用 AS2 解码器来处理 AS2 消息。

在 AS2EdiReceive 管道处理带有 EDI 负载的传入 AS2 消息时,该管道会先完成对已接收消息的 AS2 处理,然后执行 EDI 处理。 如果该管道为 AS2 消息的 EDI 负载生成一个 EDI 确认,则它必须异步返回该 EDI 确认,因为连接已由 AS2 响应关闭。

接收端口

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

可同步或异步返回 MDN。 这由 AS2 消息的 Disposition-notification-to 标头确定,除非在“协议属性”对话框的单向 AS2 协议选项卡中选择了“将协议设置用于验证和 MDN 而不是消息标头”属性。 如果选择属性,则 MDN 的返回方式由“协议属性”对话框的单向 AS2 协议选项卡的“发件人 MDN 设置”页中的“请求异步 MDN”属性确定。 有关详细信息,请参阅 AS2 消息MDN 消息

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

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

注意

用于接收 AS2 消息的双向接收端口不得用于接收 MDN 消息, 而应使用静态单向接收端口来接收 MDN 消息。 对异步返回的 MDN 使用请求/响应接收端口将会阻止返回 200OK 消息来响应传入 MDN,从而导致不必要的 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,而动态发送端口将从 MessageBox 中提取并异步发送 EDI 确认。 EDI 确认会始终通过 AS2 传输类型异步发送,因为 MDN 或 HTTP 响应是同步发送的。

  • 创建 MDN 的副本,并将其存储在不可否认接收数据库中(如果在单向 AS2 协议属性中启用了相应选项)。

  • 创建解码后的消息的副本,并将该副本存储在不可否认接收数据库中(如果在单向 AS2 协议属性中启用了相应选项)。

    如果出现 AS2 错误,则不会对接收的消息进行进一步的处理。 然而,接收管道仍将生成 MDN 响应。

另请参阅

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