EnvelopeProcessing(BizTalk Server 示例)
EnvelopeProcessing 示例演示如何在 BizTalk Server 管道中处理消息和消息信封。 此外,它还显示如何将平面文件消息处理成 XML 消息。
本示例的用途
本示例将 EnvInput 文件夹配置为接收位置。 在将文件(如示例文件 EnvelopeProcessing_in.txt)放入此文件夹后,BizTalk Server 将按照以下步骤处理该文件内的消息:
BizTalk Server 从接收位置文件夹 EnvInput 检索消息文件。
在接收管道中,平面文件拆装器管道组件将从平面文件消息中删除标头和尾部,并将其分析成各个消息。
在 MessageBox 数据库中,使用订阅筛选器将消息路由到发送端口。
在发送端口的发送管道中,XML 组装器管道组件将消息包装在 XML 信封中,然后将其放入发送适配器文件夹 EnvOutput 中。
此示例的设计方式和原因
本示例的设计必须适合两个基本要求:
接收和处理包含一个或多个采购订单的平面文件消息。
将一个包含一个采购订单和发件人信息的 XML 消息发送到一个目录,以便由后端处理系统提取。
为满足这些要求,结合使用了平面文件/XML 架构和自定义管道。 下表对以上设计元素和其他设计元素进行了总结。
设计元素 | 选择的原因 |
---|---|
自定义接收管道 | - 使用平面文件反汇编程序和平面文件架构来转换入站采购订单消息。 |
消息标头、正文和尾部的平面文件架构 | - 定义所有相同的记录和字段特征 (包括结构) 为 XML 架构,并提供一种机制,用于定义将平面文件实例消息转换为等效 XML 实例消息所需的所有平面文件特征 (,反之亦然) 。 - 标头、正文和尾部架构用于将正文拆分为离散区块进行处理。 |
信封架构 | - 用于使用标头中的信息包装单个采购订单。 |
订阅筛选器 | - 订阅筛选器通过根据属性字段捕获满足一个或多个条件的消息来执行实际路由。 |
自定义发送管道 | - 使用 XML 汇编程序以及信封和正文架构的组合将实例消息转换为 XML 格式。 |
以下注意事项适用于设计本示例:
平面文件架构 (PO.xsd) 包含描述采购订单平面文件的结构的扩展标注。 可手动创建这些文件,但大多数文件都可以使用平面文件向导生成。
采购订单 (PO.xsd) 平面文件架构使用 elementFormDefault 值 Unqualified。 这会生成正确结果,但该结果带有其他意外 xmlns 限定。 使用 elementFormDefault 的 Qualified 值可避免此问题。
使用标头和尾部平面文件架构从消息中分离出标题和尾部数据。 平面文件拆装器的标头、文档和尾部架构属性被分别设置为标头、采购订单和尾部架构。
XML 信封架构结合标头和采购订单中的元素生成单个 XML 消息。 标头架构将 Source 字段提升为 BTS.bts_system_properties 命名空间中的 SourceParty 字段;信封架构会提升此相同的值,导致它降级到出站消息中。
本示例所在的位置
<Samples Path>
\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
下表显示了本示例中的文件及其用途说明:
文件 | 说明 |
---|---|
Cleanup.bat | 用于取消部署程序集并从全局程序集缓存中删除这些程序集。 删除发送和接收端口。 根据需要删除 Microsoft Internet 信息服务 (IIS) 虚拟目录。 |
EnvelopeProcessing.btproj、EnvelopeProcessing.sln | 本示例的项目文件和解决方案文件。 |
EnvelopeProcessing_in.txt | 示例输入文件。 |
Header.xsd, PO.xsd、Trailer.xsd | 分别为平面文件标头、正文和尾部的架构。 |
XmlEnvelope.xsd | 出站 XML 信封的架构。 |
EnvReceivePipeline.btp、EnvSendPipeline.btp | BizTalk Server 分别使用平面文件拆装器和 XML 组装器管道组件接收和发送管道文件。 |
EnvelopeProcessingBinding.xml | 用于如端口绑定之类的自动化设置。 |
Setup.bat | 用于生成和初始化本示例。 |
如何使用本示例
可将本示例用作您自己的平面文件处理解决方案的基础, 并可根据自己的需要扩展本示例中用到的诸多设计元素。 以下是一些示例:
增强示例以在 XML 版本之外还编写每个采购订单的平面文件版本。 这可以通过创建新的自定义发送管道和使用平面文件组装器来实现。 在平面文件组装器中,指定平面文件标头、采购订单和尾部架构。 当用于发送端口中时,这将生成带有标头/尾部信息的单个采购订单。
使用采购订单中的更多信息增强信封。 若要将其他信息写入出站消息,请使用 Quick Promote 升级“发送到”名称或其他字段,将字段添加到信封中,然后将信封字段升级为相同字段。 当通过组装器处理消息时,将对升级的属性降级并将其复制到出站消息中。
生成和初始化此示例
生成和初始化 EnvelopeProcessing 示例
在命令窗口中,导航到下面的文件夹:
<示例路径>\Pipelines\AssemblerDisassembler\EnvelopeProcessing
运行 Setup.bat 文件,该文件将执行以下操作:
在下面的文件夹中,为本示例创建输入 (EnvInput) 和输出 (EnvOutput) 文件夹:
<示例路径>\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
为本示例编译并部署 Visual Studio 项目。
创建并绑定 BizTalk Server 接收位置、发送和接收端口。
本示例在创建和绑定端口时将显示以下警告:
Warning: Receive handler not specified for receive location "EnvelopeProcessing_RL"; updating with first receive handler with matching transport type. Warning: Host not specified for orchestration "EnvelopeProcessing"; updating with first available host.
可以安全地忽略这些警告。 (为了适应用户安装中可能存在的命名差异,绑定文件中省略了主机名和接收处理程序。)
启用接收位置并启动发送端口。
注意
在尝试运行本示例前,您应确认在生成和初始化过程中 BizTalk Server 未报告任何错误。
注意
如果选择在此示例中打开并生成项目而不运行 Setup.bat,则必须首先使用.NET Framework强名称实用工具 (sn.exe) 创建强名称密钥对。 使用此密钥对对对生成的程序集进行签名。
注意
若要撤销 Setup.bat 所做的更改,请运行 Cleanup.bat。 必须在第二次运行 Setup.bat 之前运行 Cleanup.bat。
运行本示例
运行 EnvelopeProcessing 示例
将 EnvelopeProcessing_in.txt 文件的副本放到 EnvInput 文件夹下。
查看在文件夹 EnvOutput 中创建的三个 .xml 文件。 这些 .xml 文件的名称基于其消息 ID GUID。 它们包含从输入文件提取和在信封中包装的消息。
本示例中使用的类或方法
配置脚本 Setup.bat 和 Cleanup.bat 依赖于以下 Windows 管理规范 (WMI) 管理脚本:
启动发送端口\StartSendPort.vbs
启用接收位置\EnableRecLoc
删除发送端口\RemoveSendPort
安装和清除批处理文件使用以下 BTSTask:
BTSTask ImportBindings ,用于应用绑定文件并创建应用程序、端口和绑定
BTSTask RemoveApp 以删除 FlatFileReceiveApplication