从 BizTalk Server 连接到 Azure 逻辑应用

若要在 BizTalk Server 与 Azure 中的逻辑应用工作流之间交换消息,可以在 BizTalk Server 中将适配器用于 Azure 逻辑应用。 本指南演示如何从逻辑应用工作流接收 BizTalk Server 中的消息。 工作流可以将消息发送到 BizTalk Server。 接收端使用 Internet Information Services (IIS) 应用程序来处理与 Azure 服务的通信。

如果 BizTalk Server 位于本地并已加入域,则必须在 BizTalk Server 上安装本地数据网关,并在 Azure 中创建本地数据网关资源。 但是,如果 BizTalk Server 安装在 Azure 虚拟机上,可以选择是否将虚拟机公开为 HTTP 终结点,该终结点具有可以调用的 URL。

如果选择 HTTP 终结点选项,则无需使用网关。 而是创建逻辑应用工作流,添加所需的 BizTalkServer 连接器操作,并根据需要提供操作的连接信息所需的 HTTP 终结点 URL。 但是,如果选择本地选项,则必须设置和使用本指南后面的数据网关。

本指南还演示如何将消息从 BizTalk Server 发送到逻辑应用工作流。 换句话说,逻辑应用工作流可以从 BizTalk Server 接收消息。

本指南演示如何使用 Azure 逻辑应用适配器创建接收位置和发送端口。 可以将此适配器用于本地 BizTalk Server 或运行 BizTalk Server 的 Azure 虚拟机。

先决条件

  • Azure 帐户和订阅,以便登录到 Azure 门户,并创建逻辑应用资源和工作流。 如果没有订阅,注册免费的 Azure 帐户

  • BizTalk Server 要求,具体取决于安装服务器的位置:

    • 使用 BizTalk Server 的本地计算机:为 Azure 逻辑应用安装和设置 本地数据网关。 然后,在 Azure 门户中,创建 数据网关资源 用于逻辑应用工作流中的 BizTalk 服务器连接器。

    • 使用 BizTalk Server 的 Azure 虚拟机:

      • 如果未将虚拟机公开为 HTTP 终结点,请为 Azure 逻辑应用安装和设置 本地数据网关。 然后,在 Azure 门户中创建 数据网关资源,以便与逻辑应用工作流中的 BizTalk Server 连接器配合使用。

      • 如果虚拟机作为 HTTP 终结点公开,则无需使用数据网关安装,也不需要创建数据网关资源。

  • 一些熟悉 Azure 逻辑应用。 如果不熟悉逻辑应用,请参阅 什么是 Azure 逻辑应用?在多租户 Azure 逻辑应用中创建示例消耗逻辑应用工作流。

  • (可选)假设工作流以可以接收 HTTP 请求的触发器(例如 请求 触发器)开头,则可以发送触发逻辑应用工作流的测试消息。 若要发送此消息,请使用可将 HTTP 请求发送到工作流中为触发器生成的终结点 URL 的工具。 以下列表包括一些示例工具:

    谨慎

    对于具有敏感数据(例如凭据、机密、访问令牌、API 密钥和其他类似信息)的方案,请确保使用一个工具,以必要的安全功能保护数据、脱机或本地工作,不会将数据同步到云,并且不需要登录到联机帐户。 这样,就可以降低向公众公开敏感数据的风险。

安装 Azure 逻辑应用适配器

BizTalk Server 2020 及更新版本

从 BizTalk Server 2020 开始,Azure 逻辑应用适配器包含在 BizTalk Server 安装中。

BizTalk Server 2016

  1. 在 BizTalk Server 上,下载并安装 Azure 逻辑应用适配器:

    1. 转到 Microsoft BizTalk Server Adapter for Logic Apps,然后选择 下载

    2. 若要安装,请打开 LogicAppAdapter.iso 文件,并运行 LogicApp Adapter.msi 文件。

    3. 接受许可协议,然后选择 安装

  2. 安装完成后,重启 BizTalkServerApplicationBizTalkServerIsolatedHost 主机实例。

安装完成后,你具有以下状态:

  • Azure 逻辑应用适配器已添加到 BizTalk 管理。

  • 创建发送处理程序并使用 BizTalkServerApplication 主机实例。

  • 接收处理程序创建为 Windows Communication Foundation 服务,并使用 BizTalkServerIsolatedHost 主机实例。

  • LogicApp Adapter 文件夹在 BizTalk 安装目录中创建,其中包括两个服务:管理ReceiveService

    • 管理:由逻辑应用工作流中的 BizTalk 连接器用来使用数据网关连接到 BizTalk Server。 此管理服务允许 BizTalk Server 使用数据网关从逻辑应用工作流接收消息。 此服务仅在 BizTalk 的接收端使用,而不是发送端。

    • ReceiveService:BizTalk 连接器在具有接收位置的逻辑应用工作流中使用。 此服务负责从逻辑应用工作流发送消息。 此服务仅在 BizTalk 的接收端使用,而不是发送端。

从工作流接收消息

本部分列出了 BizTalk Server 从逻辑应用工作流接收消息所需的额外步骤。 随着 Azure 门户的更改,某些步骤可能与列出的步骤不完全匹配。

仅 BizTalk Server 2016:NullAdapter 和 Azure 逻辑应用适配器

如果安装 Azure 逻辑应用适配器和 NullAdapter,可能会看到以下错误:

已存在具有相同 OutboundEngineCLSID 值的另一个适配器

Azure 逻辑应用适配器和 NullAdapter 的适配器类 GUID 相同。 如果需要这两个适配器,请执行以下步骤:

  1. 在 GitHub上下载 NullAdapter 源代码。

  2. NullSendAdapter.cs 类中,更新 GUID。

  3. NullAdapter.reg 文件中,更新 OutboundEngineCLSID 值。

  4. 生成并部署 NullAdapter。

步骤 1:创建 IIS 应用程序

IIS 应用程序使用 servcies ManagementReceiveService。 可以使用新的或现有的应用程序池运行 IIS 应用程序。 AppPool 的标识要求与运行 BizTalk 服务的帐户(例如 BizTalk 应用程序用户)中的帐户成员身份,BizTalk 独立主机用户 组。

提示

如果创建新的应用程序池,请确保保留默认的 .NET CLR 版本和托管管道。 请记住,选择具有与 BizTalk 服务帐户相同的 BizTalk 组成员身份的标识(高级设置)。

创建管理 IIS 应用程序

逻辑应用工作流中的 BizTalkServer 连接器使用此 IIS 应用程序的 URL 通过 BizTalk Server 上的数据网关进行连接。

BizTalk Server 2020 及更新版本
  1. 使用 BizTalk 配置向导配置 REST API。

    有关详细信息,请参阅 配置指南

    有关 REST API 的更多详细信息,请参阅 BizTalk REST API 参考

  2. 在 Web 浏览器中,转到 http://localhost/BizTalkManagementService/Schemas

    根据 Web 浏览器,将显示架构列表,或者出现打开并保存 schemas.json 文件的提示。 如果两者均未发生,请检查 REST API 配置。

BizTalk Server 2016
  1. 打开 Internet Information Services (IIS) 管理器。

  2. 默认网站 快捷菜单中,选择“添加应用程序

  3. 在此新应用程序中:

    1. 输入应用程序的 别名(名称),例如 IISLogicApp

    2. 选择应用程序池。

    3. 物理路径 设置为 C:\Program Files (x86)\Microsoft BizTalk Server 2016\LogicApp Adapter\Management

    4. 测试设置以确认应用程序池标识通过 身份验证授权 测试。

  4. 选择“确定” 保存更改

  5. 在 Web 浏览器中,转到 http://localhost/YourApplicationAlias/schemas?api-version=2016-10-26,例如:http://localhost/IISLogicApp/Schemas?api-version=2016-10-26

    根据 Web 浏览器,将显示架构列表,或者出现打开并保存 schemas.json 文件的提示。 如果两者均未发生,则 AppPool 标识可能缺少 BizTalk 组的成员身份。

创建 BizTalk ReceiveService IIS 应用程序

逻辑应用工作流中的 BizTalkServer 连接器将此 IIS 应用程序的 URL 用于指定的接收位置。

  1. 打开 Internet Information Services (IIS) 管理器。

  2. 打开 默认网站 快捷菜单,然后选择 添加应用程序

  3. 在此新应用程序中,请按照以下步骤操作:

    1. 输入应用程序的 别名(名称),例如 ReceiveWCFService

    2. 选择与以前的 IIS 应用程序相同的应用程序池。

    3. 根据版本将 物理路径 设置为以下内容:

      • BizTalk Server 2020:C:\Program Files (x86)\Microsoft BizTalk Server\LogicApp Adapter\ReceiveService
      • BizTalk Server 2016:C:\Program Files (x86)\Microsoft BizTalk Server 2016\LogicApp Adapter\ReceiveService
    4. 测试设置以确认应用程序池标识通过 身份验证授权 测试。

  4. 选择“确定” 保存更改

步骤 2:创建逻辑应用工作流

  1. Azure 门户中,创建新的逻辑应用资源和空白工作流。

  2. 根据创建的工作流,遵循以下通用步骤,将名为 请求 触发器添加到工作流 时。

  3. 遵循以下通用步骤,将名为 准备消息的 BizTalkServer 操作添加到工作流。

  4. 在操作的连接窗格中,提供以下信息:

    财产 描述
    通过本地数据网关连接 如果使用的是本地数据网关,请选择。 仅在以下方案中需要网关:

    - 使用的是本地 BizTalk Server。

    - 在 Azure 虚拟机上使用 BizTalk Server,但虚拟机不会作为 HTTP 终结点公开。
    连接名称 输入连接的友好名称。
    BizTalk Server URL 在 IIS 应用程序 URL 中输入 BizTalk 管理的完全限定域名(FQDN)。 例如,输入 http://BizTalkServerName.corp.contoso.com/IISLogicApp/
    身份验证类型 选择 Windows
    用户名 输入 IIS 应用程序池的标识。
    密码 输入 IIS 应用程序池的密码。
    网关 - 订阅:选择与在 Azure 门户中创建的网关资源关联的 Azure 订阅。

    - 网关:选择在 Azure 门户中创建的网关资源。
  5. 选择 创建新

  6. 显示操作信息窗格后,提供必要的详细信息,例如:

    财产 描述
    正文 选择 HTTP 正文输出。
    架构 选择要使用的架构。

    注意

    此步骤假定你熟悉 BizTalk 中的架构,并知道所需的架构。 如果不确定,请部署 HelloWorld SDK 示例,更新其项目以使用 Azure 逻辑应用适配器,并使用其架构和示例消息。

  7. 遵循以下通用步骤,将名为 发送消息BizTalkServer 操作添加到工作流。

    财产 描述
    接收位置 从列表中选择 URL,或输入 ReceiveService IIS 应用程序 URL 的完全限定域名(FQDN)。 例如,输入 http://BizTalkServerName.corp.contoso.com/ReceiveWCFService/Service1.svc

    创建接收位置时,还会在“常规”选项卡上输入此确切 URL 作为接收位置传输属性中的 公共地址
    正文 从前面的 BizTalk Server 操作中选择正文输出。
  8. 保存工作流。 在设计器工具栏上,选择 保存

    此步骤会自动创建一个终结点 URL,该 URL 显示在 请求 触发器中。 可以将 HTTP 请求发送到此 URL,触发 或导致工作流开始运行。

  9. 复制并保存终结点 URL。 需要此信息才能 步骤 4:发送消息

步骤 3:创建接收端口和接收位置

本部分介绍如何创建自己的项目。

提示

可以部署 HelloWorld SDK 示例,而不是创建自己的接收端口和接收位置,然后更新项目以使用 Azure 逻辑应用适配器。

  1. 在 BizTalk Server 管理中,展开以下内容:

    BizTalk Server 管理>BizTalk 组>应用程序

  2. 展开应用程序以用于运行接收位置。 例如,展开 BizTalk 应用程序 - 接收

  3. 从“接收端口” 快捷菜单中,选择 “新建”,然后选择 单向接收端口

  4. 接收端口 属性中,输入以下信息:

    财产 描述
    名称 输入接收端口的名称。 例如,输入 LAReceivePort
    身份验证
    - 无身份验证(默认值):禁用身份验证。

    如果身份验证失败删除消息:启用身份验证但删除未经身份验证的消息。

    - 身份验证失败时保留消息:启用身份验证并保留未经身份验证的消息。
    为失败的消息启用路由 将处理失败的任何消息路由到订阅应用程序,例如另一个接收端口或业务流程计划。 清除此选项以挂起失败的消息并生成负确认(NACK)。 默认情况下,清除该选项。

    有关详细信息,请参阅 如何为接收端口启用失败消息的路由。
  5. 选择 接收位置,然后选择 “新建”。

  6. 输入接收位置的 名称。 例如,输入 LAReceiveLoc

  7. 对于 类型,请选择 LogicApp,然后选择 配置

  8. “常规”选项卡上,为逻辑应用工作流设置终结点地址:

    财产 描述
    地址(URI) 必填。 输入 BizTalk ReceiveService IIS 应用程序 URL,如下所示:

    格式:/{your-IIS-app2-name}/Service1.svc

    示例:/ReceiveWCFService/Service1.svc
    公共地址 必填。 输入以下 URL,如下所示:

    格式:http://{fully-qualified-machine-name}/{your-IIS-App2-name}/Service1.svc

    示例:http://btsProd.northamerica.corp.contoso.com/ReceiveWCFService/Service1.svc

    此确切 URL 也会列在接收位置的逻辑应用中。
  9. 可选。 在 绑定 选项卡上,配置基础 WCF-WebHttp 绑定的任何超时和编码相关属性。 处理大型消息时,以下属性非常有用:

    财产 描述
    打开超时 输入通道打开操作要完成的时间间隔。 此值大于或等于 System.TimeSpan.Zero

    - 默认值:00:01:00
    - 最大值:23:59:59
    发送超时 输入发送操作完成所需的时间间隔。 此值大于或等于 System.TimeSpan.Zero。 如果使用请求-响应接收端口,则此值指定整个交互完成的时间跨度,即使客户端返回大型消息也是如此。

    - 默认值:00:01:00
    - 最大值:23:59:59
    关闭超时 输入通道关闭操作完成所需的时间间隔。 此值大于或等于 System.TimeSpan.Zero

    - 默认值:00:01:00
    - 最大值:23:59:59
    最大接收的消息大小(字节) 输入在网络上接收的消息(包括标头)的最大大小(以字节为单位)。 消息大小受为每个消息分配的内存量的约束。 可以使用此属性来限制拒绝服务(DoS)攻击的暴露。

    - 默认值:65536
    - 最大值:2147483647
    最大并发调用数 输入对单个服务实例的并发调用数。 超出限制的调用将排队。 将此值设置为 0 等效于将值设置为 Int32.MaxValue

    默认值:200
  10. 可选。 在“安全”选项卡上,配置任何安全属性。 出于开发目的,可以选择“无”

    财产 描述
    安全模式 - :传输期间不会保护消息。

    - 传输:使用 HTTPS 传输提供安全性。 SOAP 消息使用 HTTPS 进行保护。 若要使用此模式,必须在 IIS 中设置安全套接字层(SSL)。

    - TransportCredentialOnly:默认值。
    传输客户端凭据类型 使用客户端身份验证时,请选择凭据类型。

    - :传输级别不会发生身份验证。

    - 基本:使用基本身份验证通过网络以纯文本形式发送用户名和密码。 必须创建与凭据对应的域或本地用户帐户。

    - 摘要:使用摘要式身份验证通过网络将密码作为哈希值发送。 仅适用于运行 Windows Server 操作系统身份验证的域控制器的域。 必须创建与客户端凭据对应的域或本地用户帐户。

    - Ntlm(默认值):客户端无需向此接收位置发送密码即可发送凭据。 必须创建与客户端凭据对应的域或本地用户帐户。

    - Windows:Windows 集成身份验证协商 Kerberos 或 NTLM,如果存在域,则首选 Kerberos。 若要使用 Kerberos,必须让客户端使用服务主体名称(SPN)标识服务。 必须创建与客户端凭据对应的域或本地用户帐户。

    - 证书:使用客户端证书。 必须在此计算机的受信任根证书颁发机构证书存储中为客户端 X.509 证书安装 CA 证书链,以便客户端能够向此接收位置进行身份验证。

    - InheritedFromHost
    使用单一登录
  11. 可选。 在 消息 选项卡上,使用 出站 HTTP 标头 属性添加任何自定义标头,并使用其他属性来帮助解决故障:

    财产 描述
    出站 HTTP 标头 输入要在响应消息上标记的任何 HTTP 标头。
    禁用故障 的位置 如果入站处理因接收管道失败或路由失败而失败,则禁用接收位置。 默认情况下,清除该选项。
    失败时挂起请求消息 如果入站处理因接收管道失败或路由失败而失败,请暂停请求消息。 默认情况下,清除该选项。
    在故障 中包含异常详细信息 发生错误时,返回任何 SOAP 错误以帮助调试。 默认情况下,清除该选项。

有关更多接收端口和位置属性,请参阅 管理接收位置

步骤 4:发送消息

  1. 打开用于发送 HTTP 消息或请求的工具。

  2. 在逻辑应用工作流中粘贴从 请求 触发器保存的终结点 URL。 在前面的步骤中复制了此 URL。

  3. 选择 POST 作为要使用的 HTTP 方法。 将 内容类型 标头设置为 application/json。 在请求正文中,粘贴以下 JSON,并按照工具的说明发送 HTTP 消息。

    {"hello":"world"}
    

    由于请求是对 BizTalk 的单向调用,因此应会出现 HTTP 202。

  4. 如果使用 HelloWorld SDK 示例,请转到 BizTalk 服务器。 发送文件夹中可能存在文件。

将消息发送到逻辑应用工作流

步骤 1:创建逻辑应用工作流

  1. Azure 门户中,创建新的逻辑应用资源和空白工作流。

  2. 按照以下通用步骤将名为 请求 触发器添加到工作流

  3. 假设你有一个Microsoft工作或学校帐户,按照以下通用步骤操作,将名为 发送电子邮件 添加到工作流 Office 365 Outlook 操作。

  4. 如果出现提示,请登录到 Office 365 Outlook。

  5. 在操作的连接窗格中,提供以下信息:

    财产 描述
    输入 Office 365 电子邮件地址。
    主题 输入从 BizTalk发送
    正文 在编辑框中选择。 出现闪电和函数图标时,选择闪电图标以打开动态内容列表。 从列表中,在 收到 HTTP 请求下,选择要包含在电子邮件中的触发器输出。

    工作流类似于以下示例:

    屏幕截图显示了包含示例请求触发器信息的工作流。

    屏幕截图显示了包含示例 Office 365 Outlook 操作信息的工作流。

  6. 保存工作流。 在设计器上,选择 保存

  7. 请求触发器 信息中,复制保存工作流时自动创建的 HTTP URL。 下一步需要此 URL。 如果未显示 URL,可能需要关闭并重新打开逻辑应用。

步骤 2:创建发送端口

要使 BizTalk Server 能够将消息发送到逻辑应用工作流,工作流必须以 manual 触发器开头,例如 收到 HTTP 请求时

  1. 在 BizTalk Server 管理中,展开以下内容:

    BizTalk Server 管理>BizTalk 组>应用程序

  2. 展开应用程序以用于运行发送端口。 例如,展开 BizTalk 应用程序 - 发送

  3. 发送端口 快捷菜单中,选择 “新建”,然后选择 静态单向发送端口

  4. 输入发送端口的 名称。 例如,输入 LASendPort

  5. 类型 列表中选择 LogicApp,然后选择 配置

  6. 常规 选项卡上,通过选择选项为逻辑应用工作流触发器提供 回调 URI

    选项 1

    触发器(回调 URI) 属性中,粘贴先前复制 HTTP URL

    提示

    还可以使用 Azure 资源管理器 API 获取此 URI。

    选项 2

    如果不知道 回调 URI,请选择 配置并登录到 Azure。 选择 订阅资源组逻辑应用触发器的值。

  7. 可选。 在 绑定 选项卡上,配置基础 WCF-WebHttp 绑定的任何超时和编码相关属性。 处理大型消息时,这些属性非常有用:

    财产 描述
    打开超时 输入通道打开操作要完成的时间间隔。 此值大于或等于 System.TimeSpan.Zero

    - 默认值:00:01:00
    - 最大值:23:59:59
    发送超时 输入发送操作完成所需的时间间隔。 此值大于或等于 System.TimeSpan.Zero。 如果使用请求-响应接收端口,则此值指定整个交互完成的时间跨度,即使客户端返回大型消息也是如此。

    - 默认值:00:01:00
    - 最大值:23:59:59
    关闭超时 输入通道关闭操作完成所需的时间间隔。 此值大于或等于 System.TimeSpan.Zero

    - 默认值:00:01:00
    - 最大值:23:59:59
    最大接收的消息大小(字节) 输入在网络上接收的消息(包括标头)的最大大小(以字节为单位)。 消息大小受为每个消息分配的内存量的约束。 可以使用此属性来限制拒绝服务(DoS)攻击的暴露。

    Azure 逻辑应用适配器在缓冲传输模式下使用 WebHttpBinding 类 来与终结点通信。 对于缓冲传输模式,WebHttpBinding.MaxBufferSize 属性始终等于此属性的值。

    - 默认值:65536
    - 最大值:2147483647
  8. 可选。 在“消息”选项卡上,使用 出站 HTTP 标头 属性在传出消息上添加任何自定义标头。

  9. 选择 “确定” 保存配置。

有关更多发送端口属性,请参阅 管理发送端口和发送端口组

步骤 3:发送一些消息

可以使用 文件 适配器创建接收端口和接收位置。 确保逻辑应用资源已启用。

  1. 创建接收端口,例如 *FileSendPort

  2. 创建接收位置,并设置类似于以下示例值的属性:

    财产 示例输入
    接收文件夹 C:\temp\In\
    文件掩码 *.txt
    管道 PassThruReceive
  3. 在之前创建的发送端口中,将 筛选器 设置为以下示例值:

    财产 算子 价值
    BTS。ReceivePortName == FileSendPort
  4. 使用以下文本创建名为 {file-name} 的文本文件.txt,然后将此文本文件作为示例消息:

    <Data>
      <DataID>DataID_0</DataID>
      <DataDetails>DataDetails_0</DataDetails>
    </Data>
    
  5. {file-name}.txt 复制到接收文件夹中。

    发送端口使用提供的 URI 将 .txt 文件发送到逻辑应用工作流。 工作流收到文件后,工作流会将包含示例消息的电子邮件发送到指定的 收件人 地址。

下一个