BizTalk适配器:将电子邮件处理集成到企业解决方案中2010-02-06 MSDN Alex Starykh本文讨论:BizTalk业务流程结构构建自定义BizTalk解决方案从电子邮件提取并处理数据创建自定义适配器本文使用了以下技术:BizTalk Server 2006目录首先是一些背景介绍构建解决方案业务流程创建自定义适配器以下所述情况是随处都可能存在的常见问题。您会接收到各种形式的数据,而且这些数据通常会触发某种客户服务、订单履行或其他业务流程。一般来说,数据会以电子邮件的形式传送进来,并可能附带有其他文档。收到电子邮件后,需要发送自动回复,电子邮件也必须保存到数据库或业务线 (line-of-business, LOB) 应用程序。对于所接收的数据,不同的数据类型需要使用不同的电子邮件通知。处理各种数据格式和工作流程并非易事。幸运的是,我们可以求助于 BizTalk® Server。在本文中,我将设计开发一个解决方案来展示如何进行此类处理。 我的解决方案使用BizTalk Server 来达到以下目的:监视指定电子邮件帐户是否有新邮件,在收到新的电子邮件时触发确认过程,然后将电子邮件的整个内容(包括所有附件)保存到自定义数据库。其中还包含一些条件逻辑,可根据 Claim(此示例中创建的一个架构)中的数据来发送通知。 BizTalk Server 2006 中的新功能(包括新的 POP3适配器、增强型 SMTP适配器以及可变多部分邮件支持)将与解决方案形成整体。如果要进一步加深对BizTalk 的了解和认识,您可以查阅 Aaron Skonnard 在本杂志 2005 年 11 月版和 12 月版 上刊载的非常实用的介绍内容。首先是一些背景介绍BizTalk Server 是设计用于处理邮件的集成服务器。图 1 显示的是一个典型的邮件处理流程。邮件由属于接收端口的其中一个位置接收。一个端口可以拥有多个接收位置,而每个位置始终有且仅有一个端口。每个接收位置具有适用于某一个适配器的特定配置。例如,某个接收位置可能包含针对文件适配器的配置设置,指定要从何种文件夹轮询何种类型的文件(文件掩码)。当适配器接收到新消息时,该消息会从接收位置移到接收端口,然后移到管道。管道即是要对每个消息执行操作的一系列组件。通常,管道会执行解码、解密、验证消息以及生成 XML 形式的内容之类的任务。

图 1BizTalk 中的典型消息流程管道中的工作完成后,消息会提交到称为 MessageBox 的 SQL Server™数据库,其中包含有关订阅、尚未送达的消息和挂起的消息、消息属性、跟踪、队列以及 BizTalk 提供的其他重要服务的信息。BizTalk 是基于发布/订阅模型构建的。BizTalk 接收的每条消息都会自动路由到相应的订阅者,这些订阅者的订阅设置指明了要接收来自某个端口的所有消息。更复杂的订阅可能会使用从消息内部提升的值作为判断条件来定位特定类型的消息。当消息发布到MessageBox数据库时,如果该消息一个订阅者都没有,则会直接将它挂起。大部分挂起的消息可以稍后手动恢复以进行处理。BizTalk 中的订阅者可以是发送端口或业务流程。每个发送端口的订阅设置会确定何种消息将路由到该端口。当确定消息的发送端口后,会通过发送管道进行传送。 通常,发送管道的作用是将消息组合成适当的格式、对消息进行签名和加密等等。消息通过管道进入发送端口上配置的适配器。业务流程表示在BizTalk 接收到适当的消息时执行的业务处理工作流程。当业务流程发送消息时,那些消息会再次发布到MessageBox,以路由到匹配的发送端口。BizTalk 附带了超过 25 个适配器,涵盖了大部分传输协议和许多常用应用程序,包括文件、FTP、HTTP、SOAP、SMTP、POP3、SharePoint®、SQL Server、Oracle、SAP 和 EDI。其中的大部分可以用于接收端口和发送端口。有关可用适配器的完整列表,请参阅 BizTalk 文档。如果没有符合您的需要的内置适配器,BizTalk 还允许您创建自定义适配器。在本文稍后部分将说明如何创建自定义适配器。新的 BizTalk Server 2006 POP3适配器负责从指定邮箱轮询消息、分析消息以及分离附件。然后,适配器创建新的包含多个组成部分的消息,其中的一个消息部分指定为正文,其他部分对应于每个附件。正文部分表示引擎用于处理的默认部分,因为其类型对BizTalk 而言是已知的。但是,BizTalk无需了解消息的其他部分,除非我们明确进行声明。实际上,BizTalk Server 2006 的其中一个新功能是可以在设计时仅声明多部分消息的正文,而不用声明其他部分的数量及其类型。这在事先不了解附件数量的情况下便于使用。