演练:通过 WCF-NetMsmq 适配器发布 WCF 服务

注意

有关适配器的详细信息,请参阅 BizTalk Server 中的适配器

简介

在 BizTalk Server 中,业务流程可以发布为 Windows Communication Foundation (WCF) 服务。 通过 BizTalk 接收位置,业务流程可以公开 WCF 终结点,从而允许 WCF 客户端调用它。 BizTalk WCF 服务发布向导提供了一种将业务流程公开为接收位置的简单方法。

WCF-NetMsmq 适配器使用 NetMsmqBinding 绑定来支持使用 Microsoft 消息队列 (也称为 MSMQ) 作为其基础传输。 WCF 服务的客户端使用配置为使用 WCF-NetMSMQ 适配器的接收位置将 WCF 消息发送到 MSMQ 队列。 适配器从 MSMQ 队列中选取 WCF 消息,将其转换为BizTalk Server格式,并将其写入BizTalk Server MessageBox 数据库。

本演练演示 WCF 客户端控制台应用程序如何使用 WCF-NetMsmq 适配器通过 MSMQ 消息队列与 .NET 控制台应用程序中托管的 WCF 服务进行通信。 演示了如何使用 BizTalk WCF 服务发布向导为接收位置发布元数据。 它还演示如何配置 Web 应用程序以支持发布元数据。

在完成本演练后,你将了解如何执行以下任务:

  • 在 Visual Studio 中,使用 Deploy 命令将 BizTalk 程序集部署到 BizTalk Server 的本地实例。 这将创建一个用这些程序集填充的 BizTalk 应用程序。 BizTalk 程序集将包含各种资源信息,例如要在 BizTalk 解决方案中使用的业务流程、管道、架构和映射。

  • 在 BizTalk Server 管理控制台中,配置 WCF-NetMsmq 接收位置以托管已发布的 WCF 服务。

  • BizTalk WCF 服务发布向导中,创建 Web 应用程序以发布现有接收位置的元数据。 该元数据由向接收位置提交消息的客户端使用。

必备条件

若要执行本示例中的步骤,请确保你的环境中安装了以下必备软件:

  • 生成程序集并运行部署过程的计算机和运行示例的计算机都需要 Microsoft Windows Server、.NET Framework和BizTalk Server。

  • 用于构建程序集和运行部署过程的计算机需要安装 Microsoft Visual Studio。

  • 运行示例的计算机需要 WCF 适配器和 WCF 管理工具。 这些是在安装 Microsoft BizTalk Server 期间要安装的选项。

  • 在用于执行管理任务的计算机上,必须作为BizTalk Server管理员组成员的用户帐户运行,才能在BizTalk Server管理控制台中配置BizTalk Server应用程序设置。 此用户帐户还必须是本地管理员组的成员,才能部署应用程序,管理主机实例以及其他可能需要的任务。

  • 在需要 WCF 功能的任何计算机上,在 完成 WCF 示例 https://go.microsoft.com/fwlink/?LinkId=135510的一次性设置过程。

  • 在运行示例并将绑定或 .msi 文件导入BizTalk Server的计算机上,请确保主机不是受信任的主机,否则导入将失败。

  • 必须下载演练代码并将其提取到计算机。 本演练是整个 WCF 适配器演练包的一部分。 可以从 BizTalk Server 开发人员中心https://go.microsoft.com/fwlink/?LinkId=194140下载文件WCFAdapterWalkthroughs.exe。

生成和部署 BizTalk 解决方案 BizTalkApp

  1. 将 WCFNetMsmqAdapterPublishing.exe 提取到 C:\WCFNetMsmqAdapterPublishing

  2. 在 Visual Studio 中,打开 WCFNetMsmqAdapterPublishing.sln 文件。

  3. 在解决方案资源管理器中,展开 BizTalkApp,然后打开 OrderProcess.odx 进行查看。 示例业务流程接收订单请求消息,但只返回订单响应消息。

  4. 由于 BizTalkApp 程序集必须安装在 GAC 中,因此需要强名称密钥文件才能完成部署过程。 右键单击 BizTalkApp 项目,然后单击“ 属性”。 在 “属性” 页上,单击“ 签名”,然后选择“ 对程序集进行签名”。 单击“选择强名称密钥文件”下拉列表中的向下箭头,单击“新建>”<,然后在“密钥文件名”文本框中输入 keyfile.snk 。 取消选中“ 使用密码保护密钥文件”,然后单击“ 确定”。

  5. 单击“部署”选项卡,如果对 BizTalk 管理数据库使用除 LOCALHOST 之外的其他数据库服务器,则更改服务器属性。 确保 BizTalk 应用程序 值设置为 WCFNetMsmqAdapterPublishing。 确保 安装到全局程序集缓存 设置为 True

  6. 在“解决方案资源管理器”中,右键单击 BizTalkApp 项目,然后单击“重新生成”。

  7. 在“解决方案资源管理器”中,右键单击“BizTalkApp”,然后单击“部署”。

配置应用程序

  1. 确保按如下方式将 Microsoft 消息队列 (MSMQ) 组件安装在您的计算机上:

    1. 单击“开始”,右键单击“计算机”,然后单击“管理”打开服务器管理器

    2. 展开“ 功能” 节点。 如果未安装 消息队列 ,请右键单击“ 功能”,然后选择“ 添加功能”。 检查 消息队列,单击“ 下一步”,然后单击“ 安装 ”以在该系统上安装 MSMQ。

  2. 按照以下方法确保在您的计算机上启动 MSMQ 消息队列,以供 WCF-NetMsmq 适配器使用:

    1. 单击“开始”,指向“管理工具”,然后单击“服务”

    2. “服务”中,确保消息队列服务的状态“启动”。 如果服务未启动,请右键单击“ 消息队列”,然后单击“ 启动”。

  3. 创建接收位置使用的目标队列,WCF-NetMsmq 适配器从中选取来自客户端的传入 WCF 消息。

    1. 单击“ 开始”,指向 “管理工具”,然后单击“ 计算机管理”。

    2. “计算机管理”中,展开“ 服务和应用程序”,展开“ 消息队列”,右键单击“ 专用队列”,指向“ 新建”,然后单击“ 专用队列”。

    3. 在“新建专用队列”对话框中,键入WCFNetMsmqAdapterPublishing队列名称”文本框,选择“事务检查”框,然后单击“确定”。

  4. 为示例应用程序创建 WCF-NetMsmq 接收位置,如下所示:

    1. 单击“开始”,指向“所有程序”,指向“Microsoft BizTalk Server 20xx”,然后单击“BizTalk Server管理”。

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

    3. 在“ 接收端口属性 ”对话框的“ 名称 ”文本框中,键入 WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder,然后单击“ 确定”。

    4. 在BizTalk Server管理控制台中,右键单击“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder”,指向“新建”,然后单击“接收位置”。

    5. 在“ 接收位置属性 ”对话框的“ 名称 ”文本框中,键入 WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder.NetMsmq

    6. 在“接收位置属性”对话框的“传输”部分中,从下拉列表中选择“WCF-NetMsmq”,然后单击“配置”。

    7. “WCF-NetMsmq 传输属性 ”对话框的“ 常规 ”选项卡上,在“ 地址 (URI) ”文本框中,键入 net.msmq://localhost/private/WCFNetMsmqAdapterPublishing

    8. “WCF-NetMsmq 传输属性”对话框中的“绑定”选项卡上,确保选中“事务检查”框。

      注意

      由于已将目标队列创建为事务队列,因此必须选中此检查框。 如果未选中此框,则不会启用接收位置,因为接收位置的事务要求与基础 MSMQ 队列的事务要求之间存在差异。

    9. “WCF-NetMsmq 传输属性”对话框中的“安全性”选项卡上,从“安全模式”下拉列表中选择“”。

      注意

      本演练假定 MSMQ 已安装,但计算机上禁用了 Active Directory 集成。 启用 Active Directory 集成后,MSMQ 身份验证模式属性的默认值 WindowsDomain 可用。

    10. 在“ 接收位置属性 ”对话框中,单击“ 确定”。

  5. 为示例应用程序创建 FILE 发送端口。 此端口用于路由来自服务的基础业务流程采购定单的响应。

    1. 在BizTalk Server管理控制台中,展开“WCFNetMsmqAdapterPublishing”,右键单击“发送端口”,指向“新建”,然后单击“静态单向发送端口”。

    2. 在“ 发送端口属性 ”对话框的“ 名称 ”文本框中,键入 WCFNetMsmqAdapterPublishing.SendPurchaseOrder.File

    3. 在“发送端口属性”对话框中,在“类型”旁边的“传输”部分,从下拉列表中选择“文件”,然后单击“配置”。

    4. 在“ 文件传输属性 ”对话框的“ 常规 ”选项卡上,在“ 目标文件夹 ”文本框中键入 C:\WCFNetMsmqAdapterPublishing\Out,然后单击“ 确定”。

    5. 在“ 发送端口属性 ”对话框中,单击“ 确定”。

  6. 指定示例应用程序的主机名和绑定,如下所示:

    1. 在BizTalk Server管理控制台中,展开“WCFNetMsmqAdapterPublishing”,展开“业务流程”,右键单击示例业务流程,单击“属性”,单击“绑定”,然后将“主机”设置为“BizTalkServerApplication”或其他适当的主机。

    2. 在“业务流程属性”对话框中,从 PurchaseOrderRequestPort“接收端口”下拉列表中选择“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder”。

    3. 在“业务流程属性”对话框中,从 PurchaseOrderResponsePort“发送端口/发送端口组”下拉列表中选择“WCFNetMsmqAdapterPublishing.SendPurchaseOrder.File”。

    4. 在“ 业务流程属性 ”对话框中,单击“ 确定 ”保存配置。

发布 WCF-NetMsmq 接收位置的元数据

  1. 单击“开始”,指向“所有程序”,指向“Microsoft BizTalk Server 20xx”,然后单击“BizTalk WCF 服务发布向导”。

  2. “欢迎使用 BizTalk WCF 服务发布向导” 页上,单击“ 下一步”。

  3. 在“WCF 服务类型”页上,选择“仅限元数据终结点 (MEX) 检查”框,发布 WCFNetMsmq 接收位置的元数据。 从“发布接收位置的元数据”下拉列表中选择“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder.NetMsmq”,然后单击“下一步”。

  4. “创建 WCF 服务 ”页上,选择“ 将 BizTalk 业务流程发布为 WCF 服务”,然后单击“ 下一步”。

  5. “BizTalk 程序集 ”页上的 BizTalk 程序集文件 (*.dll) 文本框中,单击“ 浏览 ”以浏览到 C:\WCFNetMsmqAdapterPublishing\BizTalkApp\bin\Development 文件夹,双击包含要发布的示例业务流程的程序集,然后单击“ 下一步”。

  6. 在“ 业务流程和端口 ”页上,确保已选中“ 端口: PurchaseOrderRequestPort” 节点,然后单击“ 下一步”。

    客户端将发布接收端口的 MEX,并用它来向接收位置提交消息。

  7. 在“ WCF 服务属性” 页上的“ WCF 服务的目标命名空间 ”文本框中,键入希望此发布的 WCF 服务使用的 URI,然后单击“ 下一步”。 对于本演练,请保留默认 URI http://tempuri.org/

  8. 在“ WCF 服务位置 ”页上,执行以下操作以指定要创建的 WCF 服务的位置,然后单击“ 下一步”:

    1. 在“ 位置 ”文本框中,键入运行 WCF 服务的 Web 目录名称,或单击“ 浏览 ”并选择 Web 目录。 对于本演练,请在“位置”文本框中保留默认位置 (http://localhost/<BizTalk 程序集名称>) 。

    2. 选择 “允许匿名访问 WCF 服务 ”选项。 此选项会为已创建的虚拟目录添加匿名访问权限。 需要选择此选项,以便允许对此向导将创建的 Web 应用程序进行匿名身份验证。

  9. 在“ WCF 服务摘要 ”页上,单击“ 创建 ”以创建 WCF 服务。

  10. “正在完成 BizTalk WCF 服务发布向导” 页上,单击“ 完成”。

配置托管已发布元数据服务的 Web 应用程序

  1. 打开命令提示符,转到 C:\inetpub\wwwroot\Microsoft.Samples.BizTalk.WCF.NetMsmqPublishing.BizTalkApp 文件夹, BizTalk WCF 服务发布向导 在其中创建了 WCF 服务。 使用记事本打开 Web.config 文件。

  2. 在记事本中,在 system.web> 元素中添加<以下行:

    <trust level="Full" originUrl="" />
    

    注意

    此设置是可选的。 它向托管已发布 WCF 服务的 ASP.NET 应用程序授予对受操作系统安全性约束的任何资源的访问权限。

  3. 使用 Internet Explorer 测试已发布的 WCF 服务,如下所示:

    1. 单击 “开始”,指向 “管理员工具”,然后单击“ Internet Information Services (IIS) 管理器”。

    2. 在 IIS 管理器中,创建一个拥有正确 BizTalk 数据库权限的应用程序池,此服务将在其中运行。 右键单击“ 应用程序池”,单击“ 添加应用程序池”,输入应用程序池的名称,然后单击“ 确定”。

    3. 展开 “应用程序池”,右键单击刚创建的应用程序池,然后选择“ 高级设置”。 在“进程模型”部分的“标识”字段下,输入有权访问BizTalk Server数据库的帐户。

    4. 依次展开“网站”、“默认网站”,然后展开 BizTalk WCF 服务发布向导创建的 Web 应用程序。

    5. 在 IIS 管理器的中心窗格中,单击“ 内容视图 ”以显示应用程序的文件。

    6. 右键单击 BizTalk WCF 服务发布向导创建的 Microsoft_Samples_BizTalk_WCF_NetMsmqPublishing_BizTalkApp_OrderProcess_PurchaseOrderRequestPort.svc 服务文件,然后单击“浏览”。 这将打开 Internet Explorer 以显示 BizTalkServerInstance 服务 页,指示 WCF 服务的实例正在运行。 该页显示一个完整的 WSDL 地址,你可以复制该地址并将其与服务元数据工具 (svcutil.exe) 一起使用,也可以从 Visual Studio 中检索代理代码和可用于为服务创建客户端应用程序的配置文件。

    7. 从 Internet Explorer 上一步显示的 BizTalkServerInstance 服务 页中,将包含完整 WSDL 地址的命令行复制到剪贴板。

      svcutil.exe http://localhost/Microsoft.Samples.BizTalk.WCF.NetMsmqPublishing.BizTalkApp/Microsoft_Samples_BizTalk_WCF_NetMsmqPublishing_BizTalkApp_OrderProcess_PurchaseOrderRequestPort.svc?wsdl

生成客户端应用程序

  1. 以管理员身份打开 Visual Studio 命令提示符,然后转到 C:\WCFNetMsmqAdapterPublishing\WCFClient 文件夹。 这是放置代理类和应用程序配置文件的位置。

  2. 粘贴包含您在上一过程中复制的整个 WSDL 地址的完整 svcutil.exe 命令行,然后按 Enter。 这会创建代理类 BizTalkServiceInstance.cs 和应用程序配置文件 ,output.config。使命令提示符窗口保持打开状态,以便在最后一节中使用。

  3. 在 Visual Studio 解决方案资源管理器中,右键单击“WCFClient”,指向“添加”,然后单击“现有项”。

  4. “添加现有项”对话框中,浏览到 WCFClient 文件夹,在“文件类型”下拉列表中选择“所有文件 (*.*) ”,选择 BizTalkServiceInstance.csoutput.config 文件,然后单击“添加”。

  5. 展开 “WCFClient”,右键单击“ output.config”,单击“ 重命名”,然后键入 App.config 作为新名称。

  6. 双击 Program.cs 以查看如何使用 svcutil.exe 生成的代理类调用已发布的 WCF 服务。

  7. 展开 “引用”,并确保 WCFClient 项目System.ServiceModel.dll引用

  8. 右键单击 WCFClient 项目,然后选择“ 生成”。 使 Visual Studio 保持打开状态,然后转到下一部分。

使用 WCF-NetMsmq 适配器测试示例解决方案

  1. 在BizTalk Server管理控制台中,右键单击 WCFNetMsmqAdapterPublishing 应用程序,然后单击“启动”。 在“ 开始 ”对话框中,单击“ 启动”。

  2. 在BizTalk Server管理控制台中,依次展开“平台设置”、“主机实例”、右键单击 BizTalkServerApplication 或其他相应的主机实例,然后单击“重启”。 尽管本步骤中并未要求,但确保本示例到此处仍能正常运行不失为一个好的方法。

  3. 在 Visual Studio 的“ 调试 ”菜单上,单击“ 在不调试的情况下启动 ”以运行 WCFClient 应用程序。 这会向 WCF-NetMsmq 接收位置发送示例消息。 您将看到以下输出消息,说明消息已发送。

    在 WCF-NetMsmq 接收位置上调用“提交”操作

    按任意键以关闭 WCF 客户端应用程序

  4. 按任意键以关闭 WCFClient 应用程序。

  5. 在 Visual Studio 命令提示符中,转到 C:\WCFNetMsmqAdapterPublishing\Out 文件夹,然后确保 WCFClient 应用程序发送回的响应消息存在。

  6. 双击 {GUID}.xml 文件以在 Internet Explorer 中打开该文件,并查看服务处理的 OrderID 值。

另请参阅

为 WCF 接收适配器配置 WCF-NetMsmq 接收位置WCF 适配器演练发布服务元数据