生成传出 MDN
AS2 接收管道会对传入消息生成一个 MDN(消息处置通知)响应。 这是由 AS2EDIReceive 接收管道(响应 EDI 编码的消息)中的 EDI 拆装器管道组件或 AS2Receive 接收管道中的 AS2 拆装器管道组件(响应非 EDI 编码的消息)执行的。
何时以及如何生成 MDN
MDN 一般基于原始 AS2 消息中的 AS2 标头生成,如下所述:
如果 AS2 消息中具有 Disposition-Notification-To 标头,则将发送 MDN。
如果消息中具有 Disposition-Notification-To 和 Receipt-Delivery-Option 标头,则将异步发送 MDN。 通过不同于原始消息所用连接的其他连接将它发送到 Receipt-Delivery-Option 标头中的 URL。
如果消息中具有 Disposition-Notification-To 标头,但不存在 Receipt-Delivery-Option 标头,则将通过原始消息所用同一连接同步发送 MDN。
拆装器将从接收到的 AS2 消息中的 AS2-To 标头创建 MDN 中的 AS2-From 标头,并从接收到的 AS2 消息中的 AS2-From 标头创建 MDN 中的 AS2-To 标头。
BizTalk Server可替代这些设置,指定是否将生成 MDN 以及如何根据参与方的 AS2 协议属性生成 MDN。 使用“协议属性”对话框的单向 AS2 协议选项卡中的“ 使用协议设置进行验证”和“MDN”替代消息中的 AS2 标头 设置 。 通过“替代入站消息属性”,您甚至可在 AS2 标头没有要求 MDN 时也发送 MDN;或者在 AS2 标头指定同步连接时通过异步方式发送 MDN。
如果设置“将协议设置用于验证和 MDN 而不是消息标头”属性“属性,则”协议属性“对话框单向 AS2 协议选项卡中”发件人 MDN 设置“页的”请求 MDN“部分中的值将用于 MDN,如下所示:
如果选择了“请求 MDN”属性,则将发送 MDN 。
如果选择了 “请求 MDN ”属性,并选择了 “请求异步 MDN ”属性,则 MDN 将以异步方式发送。 MDN 将通过与原始邮件不同的连接发送到 “收据传递选项” (URL) 属性设置为的 URL。
如果选择了 “请求 MDN ”属性,但未选择 “请求异步 MDN ”属性,则 MDN 将通过与原始消息相同的连接同步发送。
如果设置了 “将协议设置用于验证和 MDN 而不是消息标头 ”属性,则将使用消息标头中的 AS2-From 属性来生成 MDN,但将从协议属性中获取 AS2-To,并且管道将根据 请求签名的 MDN 属性对 MDN 进行签名。 AS2 标头对应于协议属性,如下所示:
协议属性 | 消息中的 AS2 标头 |
---|---|
生成 MDN | Disposition-Notification-To |
对 MDN 签名 | Signed-Receipt-Protocol |
Receipt-Delivery-Option | Receipt-Delivery-Option |
如果已启用 MDN,接收管道将升级下列上下文属性:
EdiIntAS.DispositionMode
EdiIntAS.DispositionType
若要生成 MDN,必须同时升级这两个上下文属性。 有关这些上下文属性的详细信息,请参阅 AS2 上下文属性。
如果传入消息中的配置设置和标头不一致,则管道将生成一个负值 MDN。
如果在协议属性中请求 MDN,则即使在 AS2 处理过程中出现错误,接收管道也会尝试发送一个 MDN。
接收管道如何处理生成的 MDN
如果是根据上述规则生成的 MDN,则 AS2EDIReceive 或 AS2Receive 接收管道将按如下所述处理 MDN:
创建 MDN 的副本(以传输格式)并将其存储在不可否认数据库中(如果在单向 AS2 协议属性中启用了相应选项)。
执行 MIME 处理,其中包括应用数字签名(如果在单向 AS2 协议属性中启用了相应选项)。
计算 AS2 消息有效负载的 MIC (消息完整性检查) ,并将其追加到 MDN 的 Received-content-MIC 扩展字段。 要应用于 MIC 的算法由传入消息的signed-receipt-micalg 标头或“协议属性”对话框的单向协议选项卡的“发件人 MDN 设置”页上的签名算法属性确定, (当入站消息属性被覆盖时) 。 它可以是 SHA1 或 MD5。 该算法的值还包含在 MDN 中。
在不可否认数据库中创建相关条目。
创建 MDN 消息的副本。
如果要同步传输 MDN,则管道会将
EdiIntAS.IsAS2AsynchronousMDN
属性设置为 False;如果异步,则将属性设置为 True。如果要同步传输 MDN,则与双向接收端口关联的 AS2Send 发送管道将根据设置为 False) 的属性 (获取 MDN
EdiIntAS.IsAS2AsynchronousMDN
以及相关令牌。注意
您还可设置用于订阅传出同步 MDN 的发送端口。 为此,请将发送端口筛选器设置为
EdiIntAS.IsAS2MdnResponseMessage==True
。如果异步传输该 MDN,则接收管道将把该 MDN 路由到 MessageBox。 必须设置发送端口才能订阅 MDN,并将发送端口筛选器设置为
IsAS2AsynchronousMdn==True
。 AS2Send 发送管道将基于该属性和相关标记提取消息。 如果发送端口是动态的,它将基于消息标头的 Receipt-Delivery-Notification 行中的地址路由该 MDN。 如果发送端口是静态的,它将基于发送端口的传输 URI 属性路由消息。
MDN 生成规则
生成 MDN 时将应用以下规则:
当消息发送方特别请求签名回执,但处理该消息的内容过程中出现错误时,消息接收方仍必须返回签名回执,即使事务自身可能无效。 处理消息内容时的出错原因必须在“disposition-field”中进行设置。
请求 MDN 回执时,如果显式指定应对该回执签名,但原始消息的接收方无法支持请求的协议格式或请求的 MIC 算法,则应返回签名或未签名的回执。
如果未显式请求签名,或者,如果接收方的协议无法识别签名回执请求参数,则接收方可能会返回未签名回执、签名回执或无回执。
MIC 生成
需要一个 MDN 时,原始消息的接收方将生成一个 MIC(消息完整性检查)并将其添加到该 MDN。 当 EDI 交换是多部分 MIME 内容类型的一部分时,必须在整个多部分内容(包括 EDI 交换和 MIME 标头)中计算该 MIC。 对于已加密但未签名的消息,将返回的 MIC 是根据已解密的 MIME 标头和内容计算出来的。 对于未签名且未加密的消息,必须根据无 MIME 标头的消息内容计算该 MIC。