演练:使用头部和尾部拆装平面文件

概述

本演练演示了如何使用平面文件架构向导创建的架构,对包含一个头部、一个尾部和一个重复消息正文的文件执行平面文件拆装。 在本演练中,您将参与开发一个虚构的错误跟踪系统,它满足以下要求:

  • 错误消息记录在公司内部不同的物理地点,并发送到一个中央位置,供各种后端系统进行处理。

  • 错误消息以平面文件格式写入,该平面文件格式包含一个指明其位置的头部、含有一个或多个错误消息的正文,以及一个指明批号的尾部。

  • 如果消息不包含头部、正文和尾部,则被视为无效。

    本演练结束时,会创建一个 BizTalk Server 应用程序,它可处理平面文件,并将其输出为 XML 格式,以供后端系统处理。

必备条件

对于本示例,您需要熟悉以下操作:创建 BizTalk Server 项目、签署程序集、使用 BizTalk Server 管理控制台查看应用程序和端口。 还应熟悉 演练:部署基本 BizTalk 应用程序中提供的想法。 对平面文件架构向导有个基本了解也有帮助,但不是必需的。

此示例的作用

本示例使用自定义管道和平面文件拆装器组件来处理入站平面文件消息。 解析消息使用头部、尾部和正文架构,然后将消息写到一个发送位置,以进行后端处理。

示例

若要创建该示例,请按照下述步骤进行操作。

创建新 BizTalk 项目

生成解决方案前,需要先创建一个 BizTalk 项目,确保要对其进行强命名,并为其指定一个应用程序名。 指定应用程序名可防止 BizTalk Server 将该解决方案部署到默认 BizTalk 应用程序中。

  1. 使用 Visual Studio 创建新的 BizTalk 项目。 调用项目 FFDisassemblerWalkthrough

  2. 生成密钥文件,并将其分配给该项目。 有关此任务的详细信息,请参阅签名页,Project Designer

  3. 在项目的部署属性中,将 “应用程序名称 ”设置为“FlatFileExample”,并将 “重启主机实例” 设置为 True。 设置此标志的作用是通知主机清除该程序集的所有缓存的实例。

创建示例数据文件

生成架构前,您需要创建测试文件。

  1. 启动记事本或其他文本编辑器。

  2. 创建示例测试文件。 该文件由头部、尾部和正文组成,头部用来指明报告错误的位置,尾部含有此批的批 ID,正文包含一个或多个错误记录。 该文件的格式如下:

    Location
    ERRORid|type|priority|description|errorDateTime
    …additional error records
    BatchID
    

    ERROR 记录标记为文本“ERROR”,并用“|”字符加以分隔(而不是位置)。 下表对 ERROR 记录的数据元素进行了描述。

    元素 数据类型 说明
    ID 整型 此错误的 ID。
    类型 整型 错误类型。
    优先度 字符串 优先级指示器:低、中或高。
    说明 字符串 错误的说明。
    ErrorDateTime DateTime 发生错误的日期和时间。

    该文件可拥有一个或多个 ERROR 记录。

    --或--

    将以下示例数据复制到新文件中。 最后一行包含尾随换行:

    East Coast Facility
    ERROR102|0|High|Sprocket query fails.|1999-05-31T13:20:00.000-05:00
    ERROR16502|2|Low|Time threshold exceeded.|1999-05-31T13:20:00.000-05:00
    8675309
    
    
  3. 将新示例文件保存到项目目录中。 请使用带有说明性的名称,如“ErrorFile.txt”,以便查找。

创建头部、尾部和正文架构并进行测试

创建示例数据文件后,下一步就是创建头部、尾部和正文架构。 平面文件拆装器接收管道组件使用这些架构来处理接收到的消息。

使用平面文件架构向导创建标头架构
  1. 向项目添加新架构。 在解决方案资源管理器中,右键单击“FFDisassemblerWalkthrough”,指向“添加”,然后单击“新建项”。

  2. “添加新项 ”对话框中,单击“ 架构文件” ,然后选择“ 平面文件架构向导”。 将新架构命名为“Header.xsd”,然后单击“ 添加”。

  3. “欢迎使用 BizTalk 平面文件架构向导” 页上,单击“ 下一步”。

  4. 在“ 平面文件架构信息 ”页上,单击“ 浏览 ”并找到之前创建的示例数据文件。 将 “记录名称 ”更改为“标头”,验证代码页,然后单击“ 下一步”。

    注意

    如果您将该示例文件保存为 Unicode 格式,则代码页将为 Little-Endian-UTF16 (1200)。 这不会对该示例产生不利影响。

  5. 然后,选择文档数据。 在 “选择文档数据 ”页上,突出显示第一行数据,包括新行字符 {CR} 和 {LF},如下所示:

    为标头架构

    单击“下一步”。

  6. “选择记录格式” 页上,单击“ 下一步 ”接受默认值。 您可以接受默认的“按分隔符符号”是因为数据文件不使用相对位置。

  7. 在“ 带分隔符的记录 ”页上,单击“ 下一步”。

  8. 现在,您可以指定子元素了。 头部包含一个名为“Location”的元素:

    为标头ffwiz_header_child_elements定义的位置节点

    单击“下一步”以继续。

  9. “架构视图 ”页上,验证架构。

    显示已完成标头架构ffwiz_header_schema_view的架构视图

    如果满意,请单击“ 完成 ”以完成向导。

  10. 单击 <“标头架构> ”窗格中的“架构”节点。 在“属性”窗格中,将 “元素 FormDefault ”更改为“ 限定”。 这指明本地声明的元素必须受到实例文档中的目标命名空间的限定。

使用平面文件架构向导创建预告片架构
  1. 向项目添加新架构。 在“解决方案资源管理器”中,右键单击“FFDisassemblerWalkthrough”,指向“添加”,然后单击“新建项”。

  2. “添加新项 ”对话框中,单击“ 架构文件” ,然后选择“ 平面文件架构向导”。 将新架构命名为“Trailer.xsd”,然后单击“ 添加”。

  3. “欢迎使用 BizTalk 平面文件架构向导” 页上,单击“ 下一步”。

  4. 在“ 平面文件架构信息 ”页上,单击“ 浏览 ”并找到之前创建的示例数据文件。 将 “记录名称 ”更改为“Trailer”,验证代码页,然后单击“ 下一步”。

    注意

    如果您将该示例文件保存为 Unicode 格式,则代码页将为 Little-Endian-UTF16 (1200)。 这不会对该示例产生不利影响。

  5. 然后,选择文档数据。 在 “选择文档数据” 页上,突出显示最后一行数据,包括新行字符 {CR} 和 {LF},如下所示:

    为预告片架构选择的数据

    单击“下一步”。

  6. “选择记录格式” 页上,单击“ 下一步 ”接受默认值。 您可以接受默认的“按分隔符符号”是因为数据文件不使用相对位置。

  7. 在“ 带分隔符的记录 ”页上,单击“ 下一步”。

  8. 现在,您可以指定子元素了。 头部包含一个名为“BatchID”的元素:

    为预告片ffwiz_trailer_child_elements定义的位置节点

    单击“下一步”以继续。

  9. “架构视图 ”页上,验证架构。

    显示已完成的预告片架构ffwiz_trailer_schema_view的架构视图

    如果满意,请单击“ 完成 ”以完成向导。

  10. 单击“预告片架构>”窗格中的“架构”节点。< 在“属性”窗格中,将 elementFormDefault 更改为“限定”。 这指明本地声明的元素必须受到实例文档中的目标命名空间的限定。

使用平面文件架构向导创建正文架构
  1. 向项目添加新架构。 在“解决方案资源管理器”中,右键单击“FFDisassemblerWalkthrough”,指向“添加”,然后单击“新建项”。

  2. 在“ 添加新项 ”对话框中,单击“ 架构文件 ”,然后选择“ 平面文件架构向导”。 将新架构命名为“Body.xsd”,然后单击“ 添加”。

  3. “欢迎使用 BizTalk 平面文件架构向导” 页上,单击“ 下一步”。

  4. 在“ 平面文件架构信息 ”页上,单击“ 浏览 ”并找到之前创建的示例数据文件。 将 “记录名称 ”更改为“正文”,验证代码页,然后单击“ 下一步”。

    注意

    如果您将该示例文件保存为 Unicode 格式,则代码页将为 Little-Endian-UTF16 (1200)。 这不会对该示例产生不利影响。

  5. 然后,选择文档数据。 在 “选择文档数据” 页上,突出显示数据的第二行和第三行,包括新行字符 {CR} 和 {LF},如下所示:

    为正文架构选择

    单击“下一步”。

  6. “选择记录格式” 页上,单击“ 下一步 ”接受默认值。 您可以接受默认的“按分隔符符号”是因为数据文件不使用相对位置。

  7. 在“ 带分隔符的记录 ”页上,选择“ 下一步”。

  8. 下面定义子元素。 将Body_Child1更改为“错误”,并将其元素类型设置为“重复记录”。 将 Body_Child2 元素记录类型设置为 Ignore

  9. “架构视图 ”页上,单击“ 下一步 ”以定义错误记录的子元素。

  10. “选择文档数据” 页上,单击“ 下一步”。 该向导可正确地选择记录定义的数据。

  11. “选择记录格式” 页上,单击“ 下一步”。 由分隔符设置数据格式。

  12. 在“ 带分隔符的记录 ”页上,选择 |子分隔符”。 接下来,选中“记录具有标记标识符检查框,并为标记值键入 ERROR

    配置带标记标识符的分隔记录

    单击“下一步”。

  13. 现在,定义错误记录的子元素。

    使用五个元素定义的错误记录

    单击“下一步”。

  14. “架构视图 ”页上,验证架构。

    显示已完成的正文架构ffwiz_bodyerror_schema_view的架构视图

    如果犯了任何错误,请单击“ 返回 ”并进行必要的更正。 如果满意,请单击“ 完成 ”以完成向导。

  15. 单击“ <正文架构> ”窗格中的“架构”节点。 在“属性”窗格中,将“元素 FormDefault”更改为“限定”。 这指明本地声明的元素必须受到实例文档中的目标命名空间的限定。

  16. 单击“正文架构”窗格上的“错误>”节点。< 在“属性”窗格中,将“ 最大发生时间 ”更改为 “1”。 这将使平面文件拆装器把每个错误拆分到各自的消息中。

使用 FFDasm 测试架构
  1. 打开命令提示符,将目录改到您的项目目录。

  2. 在命令提示符下,运行 FFDasm.exe,如下所示。

    <Samples Path>\SDK\Utilities\PipelineTools\FFDasm ErrorFile.txt  -hs header.xsd -bs body.xsd -ts Trailer.xsd
    

    有关此管道工具和其他管道工具的位置的信息,请参阅 管道工具

  3. FFDasm.exe 将产生两个名称为 {GUID}.xml 的输出文件,分别对应测试文件中的每个 ERROR 记录。 高优先级错误记录与以下类似:

    <Body xmlns="http://FFDisassemblerWalkthrough.Body">
      <Error>
        <ID>102</ID>
        <Type>0</Type>
        <Priority>High</Priority>
        <Description>Sprocket query fails.</Description>
        <DateTime>1999-05-31T13:20:00.000-05:00</DateTime>
      </Error>
    </Body>
    

创建自定义接收管道

现在已定义了平面文件架构,下面需要创建一个使用平面文件拆装器组件的自定义管道。 然后,就可将平面文件拆装器组件配置为使用头部、正文和尾部架构来分解消息。

  1. 向项目添加新接收管道。 在“解决方案资源管理器”中,右键单击“FFDisassemblerWalkthrough”项目,指向“添加”,然后单击“新建项”。

  2. 在“ 添加新项 ”对话框中,指向“ 管道文件” ,然后单击“ 接收管道”。 将新管道命名为“FFReceivePipeline”,然后单击“ 添加”。

  3. 通过将平面文件拆装器组件从“工具箱”窗格拖至“拆装”步骤来配置新管道。

  4. 在“属性”窗格中,将 文档架构 设置为 FFDisassemblerWalkthrough.Body将标头架构 设置为 FFDisassemblerWalkthrough.Header将 Trailer 架构 设置为 FFDisassemblerWalkthrough.Trailer

部署应用程序并配置发送端口和接收端口

创建了架构和自定义接收管道后,需要编译和部署项目。 部署完毕后,就可使用 BizTalk Server 管理控制台来配置发送端口和接收端口。

部署
  1. 在 Visual Studio 中,通过右键单击项目,然后单击“ 部署”来部署解决方案。

  2. 使用 BizTalk Server 管理控制台展开“应用程序”组,验证 FlatFileExample 是否作为自定义应用程序存在。

配置接收端口
  1. 使用 Windows 资源管理器在 FFDisassemblerWalkthrough 项目目录下创建名为“Receive”的目录。

  2. 在BizTalk Server管理控制台中,展开 FlatFileExample 应用程序,右键单击“接收端口”,指向“新建”,然后单击“单向接收端口”。

  3. 在“ 接收端口属性 ”对话框中,将端口的名称设置为“ReceiveError”。

  4. 单击“ 接收位置”,然后单击“ 新建 ”添加接收位置。 将新的接收位置命名为“ReceiveErrorLocation”。 将 接收管道 设置为 FFReceivePipeline。 对于 “传输类型”,选择“ 文件”,然后单击“ 配置”。 选择创建的接收目录,然后将 “文件掩码 ”设置为 *.txt。

  5. 单击 “确定” 。 现在接收端口配置完毕。 单击“确定”关闭。

配置发送端口
  1. 使用 Windows 资源管理器在 FFDisassemblerWalkthrough 项目目录下创建名为“Send”的目录。

  2. 在BizTalk Server管理控制台中,展开 FlatFileExample 应用程序,右键单击“发送端口”,指向“新建”,然后单击“静态 One-Way 发送端口...”

  3. 在“ 发送端口属性 ”对话框中,将端口的名称设置为“Send”。

  4. 对于传输类型,选择“ 文件”,然后单击“ 配置”。 将目标文件夹设置为前面创建的发送目录。

  5. 现在配置筛选器。 单击“ 筛选器 ”并添加一个表达式:

    • Bts。MessageType == http://FFDisassemblerWalkthrough.Body#Body
  6. 单击“ 确定 ”完成发送端口配置。 现在发送端口配置完毕。

运行示例

现在该运行示例了。 使用 BizTalk Server 管理控制台启动应用程序后,将测试文件复制到接收位置,并观察发送位置中生成的内容。

  1. 在BizTalk Server管理控制台中,右键单击 FlatFileExample 应用程序,然后单击“启动”。 这会登记并启动发送和接收端口。

  2. 将示例 Errorfile.txt 的副本放入接收目录中。 应有两个输出文件写入到发送目录中。