使用 POP3 适配器处理多部分消息
POP3 适配器可以处理符合 RFC 2045、RFC 2046 和 RFC 2047 中记录的 IETF 标准的 MIME 编码消息。 MIME 编码的消息可以只包含一个部分,也可以包含多个部分且各部分具有不同的内容类型。 本主题介绍 POP3 适配器将如何处理多部分 MIME 编码的消息。
使用 POP3 适配器接收多部分消息
如果使用 POP3 适配器的接收位置将 “应用 MIME 解码 ”选项设置为 True ,则 POP3 适配器在接收 MIME 编码的消息时执行以下操作:
从其接收的 MIME 编码消息的各部分创建一个多部分 BizTalk 消息。 此多部分消息可包含一到多个部分,并且所包含的部分数与接收到的 MIME 编码消息相同。
扫描 MIME 编码消息的标头。 如果任何标头与 主题 POP3 适配器属性架构和属性 中记录的属性列表匹配,则这些标头将提升为多部分 BizTalk 消息作为上下文属性。
使用一个可配置的算法,将 MIME 编码消息中的一个部分指定为 BizTalk 消息的正文部分。 下面 POP3 适配器使用的正文部件选择算法部分中介绍了用于确定哪个消息部分将是 BizTalk 消息正文部分的算法。
将多部分 BizTalk 消息发布到 MessageBox。
POP3 适配器使用的正文部分选择算法
当 POP3 适配器从其接收的 MIME 编码消息的各部分创建一个多部分 BizTalk 消息时,它将选择其中的一个消息部分作为 BizTalk 消息的正文部分。 BizTalk Server 将使用 BizTalk 消息正文部分来执行消息验证、映射、属性升级、平面文件组装等操作。 多部分 BizTalk 消息的订户将接收所有的消息部分,但除非使用可以理解多部分消息的业务流程、自定义管道或适配器,它将只使用指定的 BizTalk 消息正文部分。 例如,您可以配置业务流程,使其读取多部分消息的所有部分。SMTP 适配器可以读取多部分消息的所有部分。您也可以配置一个自定义管道,使其使用 MIME/SMIME 编码器管道组件。 有关使用业务流程使用多部分消息的详细信息,请参阅以下 在业务流程中处理多部分消息部分。
POP3 适配器根据为正文部件 索引 和正文部件内容类型提供的值,从可用的正文部件中选择 BizTalk 消息 正文部分。
注意
POP3 适配器旨在识别 RFC 2046 中定义的正文部件内容类型。
下面介绍了用于选择电子邮件的 BizTalk 消息正文部分的算法:
如果 “正文部件索引” 设置为 0,并且“ 正文部件内容类型 ”为空,则使用以下算法选择 BizTalk 消息正文部分:
使用内容说明标头设置为“body”的第一个 MIME 部分。
否则,使用内容类型标头设置为“text/xml”的第一个 MIME 部分。
否则,使用内容类型标头设置为“text/plain”的第一个 MIME 部分。
否则,使用内容类型标头设置为“text/”的第一个 MIME 部分。
否则,使用第一个 MIME 部分。
否则,如果将 “正文部件索引” 设置为 0 并设置了“ 正文部件内容类型 ”,则会选择与指定的正文 部件内容类型 匹配的传入消息的第一个正文部分作为 BizTalk 消息正文部分。 如果所有部分的内容类型均不与指定的正文部分内容类型匹配,则挂起消息。
否则,如果将 “正文部件索引 ”设置为大于 0 的值,并且“ 正文部件内容类型” 为空,则会选择具有指定索引的正文部件作为 BizTalk 消息正文部分。 如果指定的索引大于正文部分的数量,则挂起消息。
否则,如果将 “正文部件索引 ”设置为大于 0 的值,并且设置了“ 正文部件内容类型 ”,则“ 正文部件索引 ”仅应用于与指定的正文 部件内容类型 匹配的正文部件,并且相应的正文部件被选为 BizTalk 消息正文部件。 如果指定的索引大于具有匹配内容类型的部分的数量,则挂起消息。 如果所有部分的内容类型均不与指定的正文部分内容类型匹配,则挂起消息。
选择作为 BizTalk 消息正文部分的部分将被首先发布到 MessageBox,其余的多部分 BizTalk 消息部分则保持其在原始 MIME 编码消息中的顺序。
在业务流程中处理多部分消息
当 POP3 适配器从其接收的 MIME 编码消息创建多部分 BizTalk 消息时,会将所有部分发布到 MessageBox 数据库,即使只有其中一个部分被指定为 BizTalk 消息正文部分,也会发布所有部分。 随后,订阅多部分消息的业务流程就可以使用这些部分。 本部分说明了一些在业务流程中处理多部分消息时应注意的事项。
处理部分数和部分类型已知的多部分消息
如果业务流程将要接收具有已知部分数和已知部分类型的多部分消息,则可以选择在业务流程中声明一个多部分消息,并在设计时设置部分数和部分类型。
处理部分类型未知的多部分消息
如果业务流程接收具有未知部件类型的多部分消息,则可以在业务流程中声明多部分消息,并对其类型未知的每个部分使用 XmlDocument 类型。
处理部分数和所有部分类型均未知的多部分消息
如果业务流程接收包含未知部件数的多部分消息,则可以在业务流程中使用 XmlDocument 类型的单个部分声明多部分消息来接收该消息。 如果收到的多部分消息包含的声明部分数大于声明的部件数,则业务流程引擎将读取消息中有多少部分,然后为与声明消息类型中的部件数匹配的部分构造适当的部件类型,然后为其余部分构造 XmlDocument 部件。