演练:通过 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
将 WCFNetMsmqAdapterPublishing.exe 提取到 C:\WCFNetMsmqAdapterPublishing。
在 Visual Studio 中,打开 WCFNetMsmqAdapterPublishing.sln 文件。
在解决方案资源管理器中,展开 BizTalkApp,然后打开 OrderProcess.odx 进行查看。 示例业务流程接收订单请求消息,但只返回订单响应消息。
由于 BizTalkApp 程序集必须安装在 GAC 中,因此需要强名称密钥文件才能完成部署过程。 右键单击 BizTalkApp 项目,然后单击“ 属性”。 在 “属性” 页上,单击“ 签名”,然后选择“ 对程序集进行签名”。 单击“选择强名称密钥文件”下拉列表中的向下箭头,单击“新建>”<,然后在“密钥文件名”文本框中输入
keyfile.snk
。 取消选中“ 使用密码保护密钥文件”,然后单击“ 确定”。单击“部署”选项卡,如果对 BizTalk 管理数据库使用除 LOCALHOST 之外的其他数据库服务器,则更改服务器属性。 确保 BizTalk 应用程序 值设置为 WCFNetMsmqAdapterPublishing。 确保 安装到全局程序集缓存 设置为 True。
在“解决方案资源管理器”中,右键单击 BizTalkApp 项目,然后单击“重新生成”。
在“解决方案资源管理器”中,右键单击“BizTalkApp”,然后单击“部署”。
配置应用程序
确保按如下方式将 Microsoft 消息队列 (MSMQ) 组件安装在您的计算机上:
单击“开始”,右键单击“计算机”,然后单击“管理”打开服务器管理器。
展开“ 功能” 节点。 如果未安装 消息队列 ,请右键单击“ 功能”,然后选择“ 添加功能”。 检查 消息队列,单击“ 下一步”,然后单击“ 安装 ”以在该系统上安装 MSMQ。
按照以下方法确保在您的计算机上启动 MSMQ 消息队列,以供 WCF-NetMsmq 适配器使用:
单击“开始”,指向“管理工具”,然后单击“服务”。
在“服务”中,确保消息队列服务的状态为“启动”。 如果服务未启动,请右键单击“ 消息队列”,然后单击“ 启动”。
创建接收位置使用的目标队列,WCF-NetMsmq 适配器从中选取来自客户端的传入 WCF 消息。
单击“ 开始”,指向 “管理工具”,然后单击“ 计算机管理”。
在 “计算机管理”中,展开“ 服务和应用程序”,展开“ 消息队列”,右键单击“ 专用队列”,指向“ 新建”,然后单击“ 专用队列”。
在“新建专用队列”对话框中,键入
WCFNetMsmqAdapterPublishing
“队列名称”文本框,选择“事务检查”框,然后单击“确定”。
为示例应用程序创建 WCF-NetMsmq 接收位置,如下所示:
单击“开始”,指向“所有程序”,指向“Microsoft BizTalk Server 20xx”,然后单击“BizTalk Server管理”。
在BizTalk Server管理控制台中,依次展开 BizTalk 组、应用程序、WCFNetMsmqAdapterPublishing、右键单击“接收端口”,指向“新建”,然后单击“单向接收端口”。
在“ 接收端口属性 ”对话框的“ 名称 ”文本框中,键入
WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder
,然后单击“ 确定”。在BizTalk Server管理控制台中,右键单击“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder”,指向“新建”,然后单击“接收位置”。
在“ 接收位置属性 ”对话框的“ 名称 ”文本框中,键入
WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder.NetMsmq
。在“接收位置属性”对话框的“传输”部分中,从下拉列表中选择“WCF-NetMsmq”,然后单击“配置”。
在 “WCF-NetMsmq 传输属性 ”对话框的“ 常规 ”选项卡上,在“ 地址 (URI) ”文本框中,键入
net.msmq://localhost/private/WCFNetMsmqAdapterPublishing
。在“WCF-NetMsmq 传输属性”对话框中的“绑定”选项卡上,确保选中“事务检查”框。
注意
由于已将目标队列创建为事务队列,因此必须选中此检查框。 如果未选中此框,则不会启用接收位置,因为接收位置的事务要求与基础 MSMQ 队列的事务要求之间存在差异。
在“WCF-NetMsmq 传输属性”对话框中的“安全性”选项卡上,从“安全模式”下拉列表中选择“无”。
注意
本演练假定 MSMQ 已安装,但计算机上禁用了 Active Directory 集成。 启用 Active Directory 集成后,MSMQ 身份验证模式属性的默认值 WindowsDomain 可用。
在“ 接收位置属性 ”对话框中,单击“ 确定”。
为示例应用程序创建 FILE 发送端口。 此端口用于路由来自服务的基础业务流程采购定单的响应。
在BizTalk Server管理控制台中,展开“WCFNetMsmqAdapterPublishing”,右键单击“发送端口”,指向“新建”,然后单击“静态单向发送端口”。
在“ 发送端口属性 ”对话框的“ 名称 ”文本框中,键入
WCFNetMsmqAdapterPublishing.SendPurchaseOrder.File
。在“发送端口属性”对话框中,在“类型”旁边的“传输”部分,从下拉列表中选择“文件”,然后单击“配置”。
在“ 文件传输属性 ”对话框的“ 常规 ”选项卡上,在“ 目标文件夹 ”文本框中键入
C:\WCFNetMsmqAdapterPublishing\Out
,然后单击“ 确定”。在“ 发送端口属性 ”对话框中,单击“ 确定”。
指定示例应用程序的主机名和绑定,如下所示:
在BizTalk Server管理控制台中,展开“WCFNetMsmqAdapterPublishing”,展开“业务流程”,右键单击示例业务流程,单击“属性”,单击“绑定”,然后将“主机”设置为“BizTalkServerApplication”或其他适当的主机。
在“业务流程属性”对话框中,从 PurchaseOrderRequestPort 的“接收端口”下拉列表中选择“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder”。
在“业务流程属性”对话框中,从 PurchaseOrderResponsePort 的“发送端口/发送端口组”下拉列表中选择“WCFNetMsmqAdapterPublishing.SendPurchaseOrder.File”。
在“ 业务流程属性 ”对话框中,单击“ 确定 ”保存配置。
发布 WCF-NetMsmq 接收位置的元数据
单击“开始”,指向“所有程序”,指向“Microsoft BizTalk Server 20xx”,然后单击“BizTalk WCF 服务发布向导”。
在 “欢迎使用 BizTalk WCF 服务发布向导” 页上,单击“ 下一步”。
在“WCF 服务类型”页上,选择“仅限元数据终结点 (MEX) 检查”框,发布 WCFNetMsmq 接收位置的元数据。 从“发布接收位置的元数据”下拉列表中选择“WCFNetMsmqAdapterPublishing.ReceivePurchaseOrder.NetMsmq”,然后单击“下一步”。
在 “创建 WCF 服务 ”页上,选择“ 将 BizTalk 业务流程发布为 WCF 服务”,然后单击“ 下一步”。
在 “BizTalk 程序集 ”页上的 BizTalk 程序集文件 (*.dll) 文本框中,单击“ 浏览 ”以浏览到 C:\WCFNetMsmqAdapterPublishing\BizTalkApp\bin\Development 文件夹,双击包含要发布的示例业务流程的程序集,然后单击“ 下一步”。
在“ 业务流程和端口 ”页上,确保已选中“ 端口: PurchaseOrderRequestPort” 节点,然后单击“ 下一步”。
客户端将发布接收端口的 MEX,并用它来向接收位置提交消息。
在“ WCF 服务属性” 页上的“ WCF 服务的目标命名空间 ”文本框中,键入希望此发布的 WCF 服务使用的 URI,然后单击“ 下一步”。 对于本演练,请保留默认 URI
http://tempuri.org/
。在“ WCF 服务位置 ”页上,执行以下操作以指定要创建的 WCF 服务的位置,然后单击“ 下一步”:
在“ 位置 ”文本框中,键入运行 WCF 服务的 Web 目录名称,或单击“ 浏览 ”并选择 Web 目录。 对于本演练,请在“位置”文本框中保留默认位置 (http://localhost/<BizTalk 程序集名称>) 。
选择 “允许匿名访问 WCF 服务 ”选项。 此选项会为已创建的虚拟目录添加匿名访问权限。 需要选择此选项,以便允许对此向导将创建的 Web 应用程序进行匿名身份验证。
在“ WCF 服务摘要 ”页上,单击“ 创建 ”以创建 WCF 服务。
在 “正在完成 BizTalk WCF 服务发布向导” 页上,单击“ 完成”。
配置托管已发布元数据服务的 Web 应用程序
打开命令提示符,转到 C:\inetpub\wwwroot\Microsoft.Samples.BizTalk.WCF.NetMsmqPublishing.BizTalkApp 文件夹, BizTalk WCF 服务发布向导 在其中创建了 WCF 服务。 使用记事本打开 Web.config 文件。
在记事本中,在 system.web> 元素中添加<以下行:
<trust level="Full" originUrl="" />
注意
此设置是可选的。 它向托管已发布 WCF 服务的 ASP.NET 应用程序授予对受操作系统安全性约束的任何资源的访问权限。
使用 Internet Explorer 测试已发布的 WCF 服务,如下所示:
单击 “开始”,指向 “管理员工具”,然后单击“ Internet Information Services (IIS) 管理器”。
在 IIS 管理器中,创建一个拥有正确 BizTalk 数据库权限的应用程序池,此服务将在其中运行。 右键单击“ 应用程序池”,单击“ 添加应用程序池”,输入应用程序池的名称,然后单击“ 确定”。
展开 “应用程序池”,右键单击刚创建的应用程序池,然后选择“ 高级设置”。 在“进程模型”部分的“标识”字段下,输入有权访问BizTalk Server数据库的帐户。
依次展开“网站”、“默认网站”,然后展开 BizTalk WCF 服务发布向导创建的 Web 应用程序。
在 IIS 管理器的中心窗格中,单击“ 内容视图 ”以显示应用程序的文件。
右键单击 BizTalk WCF 服务发布向导创建的 Microsoft_Samples_BizTalk_WCF_NetMsmqPublishing_BizTalkApp_OrderProcess_PurchaseOrderRequestPort.svc 服务文件,然后单击“浏览”。 这将打开 Internet Explorer 以显示 BizTalkServerInstance 服务 页,指示 WCF 服务的实例正在运行。 该页显示一个完整的 WSDL 地址,你可以复制该地址并将其与服务元数据工具 (svcutil.exe) 一起使用,也可以从 Visual Studio 中检索代理代码和可用于为服务创建客户端应用程序的配置文件。
从 Internet Explorer 上一步显示的 BizTalkServerInstance 服务 页中,将包含完整 WSDL 地址的命令行复制到剪贴板。
svcutil.exe http://localhost/Microsoft.Samples.BizTalk.WCF.NetMsmqPublishing.BizTalkApp/Microsoft_Samples_BizTalk_WCF_NetMsmqPublishing_BizTalkApp_OrderProcess_PurchaseOrderRequestPort.svc?wsdl
生成客户端应用程序
以管理员身份打开 Visual Studio 命令提示符,然后转到 C:\WCFNetMsmqAdapterPublishing\WCFClient 文件夹。 这是放置代理类和应用程序配置文件的位置。
粘贴包含您在上一过程中复制的整个 WSDL 地址的完整 svcutil.exe 命令行,然后按 Enter。 这会创建代理类 BizTalkServiceInstance.cs 和应用程序配置文件 ,output.config。使命令提示符窗口保持打开状态,以便在最后一节中使用。
在 Visual Studio 解决方案资源管理器中,右键单击“WCFClient”,指向“添加”,然后单击“现有项”。
在“添加现有项”对话框中,浏览到 WCFClient 文件夹,在“文件类型”下拉列表中选择“所有文件 (*.*) ”,选择 BizTalkServiceInstance.cs 并 output.config 文件,然后单击“添加”。
展开 “WCFClient”,右键单击“ output.config”,单击“ 重命名”,然后键入
App.config
作为新名称。双击 Program.cs 以查看如何使用 svcutil.exe 生成的代理类调用已发布的 WCF 服务。
展开 “引用”,并确保 WCFClient 项目System.ServiceModel.dll引用 。
右键单击 WCFClient 项目,然后选择“ 生成”。 使 Visual Studio 保持打开状态,然后转到下一部分。
使用 WCF-NetMsmq 适配器测试示例解决方案
在BizTalk Server管理控制台中,右键单击 WCFNetMsmqAdapterPublishing 应用程序,然后单击“启动”。 在“ 开始 ”对话框中,单击“ 启动”。
在BizTalk Server管理控制台中,依次展开“平台设置”、“主机实例”、右键单击 BizTalkServerApplication 或其他相应的主机实例,然后单击“重启”。 尽管本步骤中并未要求,但确保本示例到此处仍能正常运行不失为一个好的方法。
在 Visual Studio 的“ 调试 ”菜单上,单击“ 在不调试的情况下启动 ”以运行 WCFClient 应用程序。 这会向 WCF-NetMsmq 接收位置发送示例消息。 您将看到以下输出消息,说明消息已发送。
在 WCF-NetMsmq 接收位置上调用“提交”操作
按任意键以关闭 WCF 客户端应用程序
按任意键以关闭 WCFClient 应用程序。
在 Visual Studio 命令提示符中,转到 C:\WCFNetMsmqAdapterPublishing\Out 文件夹,然后确保 WCFClient 应用程序发送回的响应消息存在。
双击 {GUID}.xml 文件以在 Internet Explorer 中打开该文件,并查看服务处理的 OrderID 值。