# 七、管道

## 简介

管道是强大的 BizTalk 工件，用于标准化入站和出站消息，以便在接收端口进行预处理或在发送端口进行后处理(例如，在消息框中存储消息或将消息发送到外部系统或目标系统之前进行解析操作、验证或模式评估)。BizTalk 将管道分为两种不同的类型:接收管道和发送管道。这两种类型的管道在级数上互不相同。

接收流水线有四个不同的阶段:

1.  **解码**—此阶段用于对消息进行解码或解密。此阶段用于解码或解密消息的组件。如果需要将传入的消息从一种格式解码为另一种格式，则应该将 MIME/SMIME 解码器管道组件或自定义解码组件置于此阶段。
2.  **拆解**—此阶段将消息拆解为 XML 格式。现成的 BizTalk 带来了两个反汇编器:XML 和平面文件。此阶段用于验证消息格式的组件。管道组件只处理符合该组件中指定的模式的消息。如果管道收到的消息的架构与管道中的任何组件都不相关联，则不会处理该消息。根据提交消息的适配器，消息要么被挂起，要么向发送方发出错误。
3.  **验证**—验证 XML 内容，验证模式一致性。此阶段用于验证消息格式的组件。管道组件只处理符合该组件中指定的模式的消息。如果管道收到的消息的架构与管道中的任何组件都不相关联，则不会处理该消息。根据提交消息的适配器，消息要么被挂起，要么向发送方发出错误。
4.  **解析方**—确定该消息转换后将发送给哪一方。此阶段是交易方解决方案管道组件的占位符。

![](img/image128.jpg)

图 46:接收管道

发送管道将与接收管道相反，在发送之前需要进行任何转换后处理。例如，如果您的贸易伙伴需要一个平面文件，BizTalk 必须将其内部 XML 消息格式转换为预期的格式。这些管道由三个阶段组成:

1.  **预组装**—这是一个定制阶段，因为 BizTalk 没有带来任何现成的组件。该阶段在消息进入管道之前执行。此阶段是自定义组件的占位符，这些组件应该在序列化消息之前对消息执行一些操作。
2.  **汇编**—将 XML 消息转换为所需的平面文件格式。BizTalk 为这个阶段带来了两个组件，XML 汇编器和平面文件汇编器。此阶段的组件负责组装或序列化消息，并将其转换为 XML 或从 XML 转换过来
3.  **编码**—用于对消息进行加密或添加任何签名。BizTalk 在这个阶段引入了 MIME/SMIME 编码器。此阶段用于对消息进行编码或加密的组件。如果需要消息签名，请在此阶段放置 MIME/SMIME 编码器组件或自定义编码组件。

![](img/image129.png)

图 47:发送管道

此时，您可能会问自己，为什么我一直在谈论在这些阶段中可以使用的组件。这是因为作为开发人员，您负责在需要时开发任何自定义管道，因为 BizTalk 只提供了四个用于接收和发送管道的默认管道，这些管道适用于简单的场景。它们是:

PassThruReceive

这是一个用于接收端口的管道，其中没有组件。您可以在图 47 中看到这个管道结构的例子。它允许任何消息进入您的端口，无需任何处理。

XML 接收

这是一个应用于接收端口的管道，只有 XML 反汇编器和参与方解析组件。这是一个很好的启动管道，因为它分解您的 XML 输入(必须是 XML)，并评估哪些合作伙伴将接收它。

密码传输

这是一个应用于发送端口的管道，其中没有组件。您可以在图 48 中看到这个管道结构的例子。Allsow 允许任何消息通过您的端口发送，无需任何处理。

可扩展标记语言传输

这是一个应用于发送端口的管道，只有 XML 汇编器。如果您通过您的端口发送一个 XML 文档，而没有任何后期处理，请记住，BizTalk 内部消息格式为 XML，因此 PassThruTransmit 管道对您来说就足够了。

当您开始在 BizTalk 管理员中配置物理端口时，这些管道将变得可用。

![](img/image130.jpg)

图 48:BizTalk 管理员中可用的管道

## 自定义管道

开发自定义管道就是根据您的管道类型(接收或发送)，将管道编辑器中可用的组件添加到可用的阶段。要开始创建自己的管道，在 Visual Studio 中右键单击您的项目，选择**添加**、**新项**，并根据您的开发需要选择**接收管道**或**发送管道**。之后，BizTalk 将向您展示管道编辑器。

![](img/image131.jpg)

图 49:管道编辑器

在工具箱中，您将找到我们已经讨论过的所有组件。要将它们添加到相应的阶段，只需将它们拖放到适当的阶段。删除组件后，舞台将如图 50 所示。

![](img/image132.png)

图 50:管道阶段