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

简介

本演练使用 BizTalk WCF 服务发布向导和 WCF-BasicHttp 适配器将 Windows Communication Foundation (WCF) 服务发布为 BizTalk 业务流程。 BizTalk 业务流程通过使用 WCF-BasicHttp 适配器公开 WCF 终结点,将外部客户端(例如另一个 Web 服务或 WCF 应用程序)显示为 WCF 服务。 WCF-BasicHttp 适配器由一个发送适配器和一个接收适配器组成。 在此示例中,你将仅使用此适配器的接收端通过 HTTP 或 HTTPS 协议从 WCF 客户端应用程序接收 WCF 服务请求。

WCF-BasicHttp 适配器使用 BasicHttpBinding 绑定提供与 Web 服务的初始版本兼容的传输/协议堆栈实现,充当BizTalk Server和 WCF 功能之间的桥梁。 它通过使用以文本编码的 HTTP 或 HTTPS 传输,提供与符合 WS-I 基本配置文件 1.1 的基于 ASMX 的早期 Web 服务和客户端进行通信的功能。 使用 WCF-BasicHttp 适配器,将无法利用 WS-* 协议支持的高级 Web 通信功能。 如果需要使用这些高级功能,请使用 WCF-WSHttp 适配器。

本演练演示如何创建 WCF-BasicHttp 接收位置,以将业务流程发布为 WCF 服务。 将 Internet Information Services (IIS) 配置为提供该 WCF 服务的隔离托管。 客户端应用程序调用已发布的 WCF 业务流程,作为外部客户端如何通过 Internet 调用已发布的 WCF 服务以使用其功能的示例。

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

  • 在 Visual Studio 中,使用 Deploy 命令以 BizTalk 程序集中的 BizTalk 业务流程的形式将 WCF 服务部署到 BizTalk Server 的本地实例。 从 Visual Studio 部署将创建一个 BizTalk 应用程序,其中填充有相关程序集,包含要在 BizTalk 解决方案中使用的业务流程、管道、架构和映射等资源。

  • 部署后,BizTalk 业务流程可通过 BizTalk Server 管理控制台进行配置和控制。 在本演练中,你将配置 WCF-BasicHttp 接收位置,以接受发送到 BizTalk WCF 服务发布向导创建的 WCF 服务的传入消息。 接收位置由 IIS 中的 BizTalk 独立主机托管,并充当 WCF 服务来访问传入的请求。

注意

在本演练中,你将使用 BizTalk WCF 发布向导和/或 BizTalk Web 服务发布向导将 BizTalk 业务流程和架构作为 WCF 服务发布为 WCF 适配器。 若要使用 SOAP 适配器将业务流程和架构发布为 Web 服务,请使用 BizTalk WCF 发布向导 和/或 BizTalk Web 服务发布向导

必备条件

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

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

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

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

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

  • 在需要 WCF 功能的任何计算机上,在 Windows Communication Foundation 示例的一次性设置过程中完成 WCF 示例的一次性设置过程

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

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

部署 BizTalk 解决方案示例 BizTalkApp

  1. 运行自解压缩 WCFBasicHttpReceiveAdapter.exe 文件并将文件提取到 C:\WCFBasicHttpReceiveAdapter 文件夹中。

  2. 在 Microsoft Visual Studio 中,打开 C:\WCFBasicHttpReceiveAdapter\WCFBasicHttpReceiveAdapter.sln 文件。

  3. Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp 程序集包含一个BizTalk Server业务流程、一个映射和两个架构。 它必须安装在 GAC 中,并且需要强名称密钥文件才能发生这种情况。 右键单击 BizTalkApp 项目,然后单击“ 属性”。 在 “属性” 页上,单击“ 签名”,然后选择“ 对程序集进行签名”。 单击“选择强名称密钥文件”下拉列表中的向下箭头,单击“新建>”<,然后在“密钥文件名”文本框中输入 keyfile.snk 。 取消选中“ 使用密码保护密钥文件”,然后单击“ 确定”。

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

    注意

    此时,请勿尝试 生成解决方案或生成 WCFClient 应用程序。 此时,WCFClient 尚未准备好在示例中生成。

  5. 展开 BizTalkApp,然后打开 DeliveryProcess.odx 进行查看。 业务流程使用 WCF-BasicHttp 适配器通过 HTTP 传入 WCF 请求。 它使用转换映射修改请求,并使用相同的 WCF 适配器再次发送响应。

    1. 该业务流程具有将通过 WCF-BasicHttp 适配器发布的逻辑请求响应端口。 在稍后的步骤中,该端口将绑定到物理端口。

    2. 在设计器窗口中右键单击 DeliveryProcess.odx 的顶部节点,然后选择“属性”。 确保端口 类型的 Type Modifier 属性为 Public

  6. 在“解决方案资源管理器”中,右键单击“BizTalkApp”,然后单击“属性”。

    1. 如果未在本地托管 BizTalk 管理数据库,请修改 服务器 属性(如果使用其他数据库服务器)。 单击“ 部署 ”选项卡,然后修改 “服务器 ”属性以指向数据库服务器。

    2. 确保“ 应用程序名称” 属性设置为 WCFBasicHttpReceiveAdapter。 这是将部署 BizTalk 解决方案的 BizTalk 应用程序的名称。

    3. 在“解决方案资源管理器”中,右键单击“BizTalkApp”,然后单击“部署”。 如果不在本地部署,你可能需要配置 SQL Server 以允许远程连接。 有关详细信息,请参阅如何:在SQL Server上启用远程连接

使用 BizTalk WCF 服务发布向导发布示例业务流程

  1. 在此步骤中,你将采用新部署的业务流程程序集并将其发布为 WCF 服务。 为此,请单击“开始”,指向“所有程序”,指向“MicrosoftBizTalk Server”,然后单击“BizTalk WCF 服务发布向导”。

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

  3. 在“ WCF 服务类型 ”页上,执行以下操作以指定要发布的 WCF 服务的类型和用于接收 WCF 消息的 BizTalk 终结点,然后单击“ 下一步”:

    1. 选择“ 服务终结点 ”选项,该选项表示将从程序集中的业务流程发布 WCF 服务。 从“适配器名称”中选择“WCF-BasicHttp” (“传输类型”下拉列表)

    2. 选中“启用元数据终结点检查”框,使 IIS 托管的 WCF 接收位置发布其 WCF 服务元数据。 选中此检查框会将 serviceMetadata> 元素的 <httpGetEnabled 属性设置为 true Web.Config。当 HTTP/GET 请求请求时,会检索此元数据。 稍后,你将使用 SvcUtil.exe 工具获取此数据,为客户端代码生成代理类,以用于调用 WCF 服务。

    3. 选择 “在以下应用程序中创建 BizTalk 接收位置 ”选项,为 WCF-BasicHttp 适配器创建对应于每个生成的 .svc 文件的接收端口和位置。 选择 BizTalk 应用程序名称 WCFBasicHttpReceiveAdapter,其中将生成接收端口和位置,然后单击“ 下一步”。

      向导将创建一个 Binding.XML 绑定文件,以表示关联的接收位置。 此文件位于 Web 目录中,稍后可以通过 BizTalk Server 管理控制台手动导入。

      注意

      如果未在此处选择已部署的 BizTalk 应用程序,则选择默认应用程序。

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

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

  6. “业务流程和端口 ”页上,确保已在页面上选择“ 端口: DeliveryRequestPort” 节点,然后单击“ 下一步”。 选择此节点意味着也会选择其相应的更高级别的节点。 此端口将通过承载 WCF-BasicHttp 适配器的请求-响应接收位置发布。

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

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

    1. 在“ 位置 ”文本框中,键入运行 WCF 服务的 Web 目录名称,或单击“ 浏览 ”并选择 Web 目录。 对于本演练,由于程序集名称与虚拟目录相同,因此在“位置”文本框中保留默认位置 (http://localhost/Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp) 。

    2. 选择 “允许匿名访问 WCF 服务 ”选项,然后单击“ 下一步”。 此选项允许对已创建的虚拟目录进行匿名访问。 由于本演练使用不带身份验证的传输安全模式,因此需要选择此选项以允许此向导将创建的 Web 应用程序的匿名身份验证。

  9. “WCF 服务摘要 ”页上,单击“ 创建 ”以创建 WCF 服务。 此步骤将为通过指定 Web 目录提供的指定业务流程创建一个接收端口。

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

启用 BizTalk 示例应用程序

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

  2. 在BizTalk Server管理控制台中,依次展开“应用程序”、“WCFBasicHttpReceiveAdapter”、“业务流程”、右键单击“DeliveryProcess”业务流程,单击“属性”,然后配置绑定信息,如下所示:

    1. 在“ 业务流程属性 ”对话框中,单击“ 绑定”,然后将 “主机 ”设置为 “BizTalkServerApplication”。

    2. 在“ 业务流程属性 ”对话框中,选择要绑定的 DeliveryRequestPort 的接收端口。 对于本演练,请选择 BizTalk WCF 服务发布向导在上一过程中创建的接收端口,然后单击“ 确定”。

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

配置用于承载已发布 WCF 服务的 Web 应用程序

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

  2. 在 IIS 管理器中,展开“站点”,展开“默认网站”,然后展开 BizTalk WCF 服务发布向导创建的 Web 应用程序 Microsoft.Samples.BizTalk.WCFBasicHttpReceiveAdapter.BizTalkApp

  3. 创建此服务将运行在其中的应用程序池。 右键单击“ 应用程序池”,单击“ 添加应用程序池”,输入应用程序池的名称,然后单击“ 确定”。

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

  5. 在 IIS 管理器中,单击“ 内容视图”。 在右窗格中,右键单击 BizTalk WCF 服务发布向导创建的 WCF 服务 .svc 文件,然后单击“ 浏览”。 这将打开 Internet Explorer 以显示一个页面,指示已成功创建正在运行的 WCF 服务。 此页还包含一个完整的 WSDL 地址,你可以通过复制该地址并将其用于服务元数据工具 (svcutil.exe) 来检索可用于创建该服务客户端应用程序的代理代码和配置文件。

  6. 将 Internet Explorer 在上一步中显示的页面上包含完整 WSDL 地址的 SvcUtil.exe 命令行复制到剪贴板。

为 WCF 客户端应用程序示例 WCFClient 创建代理类

  1. 创建代理类,以便 WCF 客户端应用程序可以调用 WCF 服务。 虽然不需要代理,但是手动编写代码非常复杂,因此推荐创建代理。 打开 Visual Studio 命令提示符 并转到 C:\WCFBasicHttpReceiveAdapter\WCFClient 文件夹,你将在其中放置代理类和应用程序配置文件。

  2. 粘贴 svcutil.exe 命令行,其中包含在上一过程中复制的完整 WSDL 地址,然后按 Enter 创建代理类和应用程序配置文件。 此命令行为代理类创建 BizTalkServiceInstance.cs ,并为应用程序配置文件创建 output.config

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

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

  5. 对于 WCFClient 项目,展开 “引用”,并确保 WCFClient 项目将 System.ServiceModel 作为其引用之一。

  6. 展开 WCFClient 项目,右键单击 output.config,单击“ 重命名”,然后键入 新名称App.config

  7. 双击 Program.cs 以查看如何使用Svcutil.exe生成的代理类调用已发布 WCF 服务。 实例化和调用 WCF 服务的调用似乎是使用 Microsoft_Samples_BizTalk_WCFBasicHttpReceiveAdapter_BizTalkApp_DeliveryProcess_DeliveryRequestPortClient 类进行简单编码的本地调用。 调用远程 WCF 服务不需要其他代码。

  8. 在 Visual Studio 的“ 调试 ”菜单上,单击“ 不调试的情况下启动 ”以运行 WCFClient。 客户端代码创建 DeliveryItem 消息,并调用 WCF 服务,并传入 Address、ProductID 和 Amount。

    DeliveryItem deliveryRequestItem = new DeliveryItem();
    deliveryRequestItem.Address = "One Microsoft Way";
    deliveryRequestItem.ProductID = "00A120c";
    deliveryRequestItem.Amount = "300";
    DeliveryRequestPortClient deliveryProcessClient = new DeliveryRequestPortClient("BasicHttpBinding_ITwoWayAsync");
    DeliveryItem1 deliveryConfirmation = deliveryProcessClient.Submit(deliveryRequestItem);
    

    如果客户端成功从已发布的 WCF 服务收到响应消息,则会在响应消息中显示 productID 和 Address) 串联 (传递确认号。

    使用 deliveryRequestItem 调用的提交操作

    发送回的送达确认编号:00A120c300One Microsoft Way

    按任意键继续。 . .

另请参阅

如何使用 BizTalk WCF 服务发布向导将业务流程发布为 WCF 服务