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) 平面文件架构使用元素形式默认值 Unqualified。 这会产生正确的结果,但会带有附加和意外的 xmlns 限定。 使用 Qualified 的 elementFormDefault 避免此问题。
用头部和尾部扁平文件架构来分隔消息中的头部和尾部数据。 平面文件反汇编程序标头、文档和预告片架构属性分别设置为标头、采购订单和预告片架构。
XML 信封架构将标头和采购订单中的元素组合在一起,以生成单个 XML 消息。 标头架构定义将源字段提升为 BTS.bts_system_properties 命名空间中的 SourceParty 字段;信封架构定义也提升了同一个值,导致该值在出站消息中降级。
在何处查找此示例
<Samples Path>
\Pipelines\AssemblerDisassembler\EnvelopeProcessing\
下表显示了此示例中的文件,并描述了它们的用途。
文件 | DESCRIPTION |
---|---|
Cleanup.bat | 用于取消部署程序集并将其从全局程序集缓存中删除。 删除发送和接收端口。 根据需要删除 Microsoft Internet Information Services (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 版本外,增强示例以编写每个采购订单的平面文件版本。 为此,可以创建新的自定义发送管道并使用平面文件汇编程序。 在平面文件汇编程序上,指定平面文件头、采购订单和预告片架构。 在发送端口中使用时,它会生成具有标头/预告片信息的单个采购订单。
使用采购订单中的详细信息增强信封。 若要将其他信息写入出站消息,请使用快速提升来提升“寄送到”名称或其他字段,将其添加到信封中,然后将信封字段提升为同一字段。 当消息通过汇编器处理时,被提升的属性将被降级并复制到出站消息中。
生成和初始化此示例
生成并初始化 EnvelopeProcessing 示例
在命令窗口中,导航到以下文件夹:
<Samples Path>\Pipelines\AssemblerDisassembler\EnvelopeProcessing
运行文件 Setup.bat,执行以下作:
在文件夹中为此示例创建输入 (EnvInput) 和输出 (EnvOutput) 文件夹:
<Samples Path>\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 Management Instrumentation (WMI) 脚本:
启动发送端口\StartSendPort.vbs
启用接收位置\EnableRecLoc
删除发送端口\RemoveSendPort
设置和清理批处理文件使用 BTSTask,如下所示:
BTSTask ImportBindings 应用绑定文件并创建应用程序、端口和绑定
BTSTask RemoveApp 以删除 FlatFileReceiveApplication