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