|
与早期的 Visual Studio ASMX Web 服务测试页不同,通过 WcfTestClient 您可以借助枚举、类或结构(每个类或结构都是其他类或结构的组成部分)等复合参数、甚至是参数集合和参数数组来调用操作。只需展开“Request”(请求)部分中的项,从下拉列表中设置其值(例如枚举值),并进行调用即可。如果操作接受集合或数组,您还需要设置其长度。例如,图 5 显示了以下操作的结果请求和响应:
 |
| 图5:指定数组长度和值 |
[OperationContract] bool ProcessNumbers(int[] numbers] |
类似地,“Response”(响应)窗格将包含所有返回的复合值或输出参数。这样我们发现了 WcfTestClient 的一个缺陷:为了指定要测试的不同服务,您必须先关闭,并在更改命令行参数后重新启动 WcfTestClient。如果能同时在 GUI 中提供服务地址,则可能会很好地缓解这个问题。
您可以直接将 WcfTestClient 集成到您的 Visual Studio 2008 解决方案中。首先,将类库项目添加到解决方案,并删除所有引用、文件夹和源文件(因为您不需要这些项)。然后,将 WcfTestClient.exe 设置为外部启动程序,并提供一个或多个测试服务的一个或多个元数据地址,例如 IIS 或 WAS 托管项目的 .svc 地址,或者就此而言,解决方案内部或外部主机项目的任何其他元数据地址。
请注意,如果计算机上只安装了 .NET Framework 3.0,则您不能在其上使用 WcfTestClient,因为 WcfTestClient 需要使用内部 .NET Framework 3.5 树网格控件(用于表示复合参数的控件)。
当然,您可以在一个步骤中结合 WcfTestClient 和 WcfSvcHost,这样即可自动托管服务库中的服务并对其进行测试:
WcfSvcHost.exe /service:MyService.dll /config:App.config /client:WcfTestClient.exe /clientArgs:http://localhost:9000/
但是,可以使用 WcfSvcHost 指定元数据参数。默认情况下,WcfSvcHost 将向指定客户端应用程序传送它在服务 .config 文件中找到的元数据地址。仅当服务未提供自己的元数据或您希望测试客户端使用其他地址时,才应显式指定元数据地址。此外,如果服务 .config 文件包含给定服务的多个元数据终结点,则这些终结点将按以下优先顺序提供:HTTP、TCP、IPC 和 HTTP-GET。您可以在 Visual Studio 2008 中合并这些步骤以进行无缝托管和测试体验。将 WcfSvcHost.exe 指定为启动程序,并将 .config 文件和 WcfTestClient.exe 指定为客户端。
WCF 服务库
作为 Target Framework 的一项功能,Visual Studio 2008 提供了多个新的 WCF 项目模板。通过“New Project”(新建项目)对话框中的组合框,您可以指定 Target Framework 的版本(2.0、3.0 或 3.5),如图 6 所示。
 |
| 图6:WCF 项目模板 |
如果选择 Framework 2.0,则没有任何新模板可用。Framework 3.0 中提供了一个称为 WCF 服务库的新项目模板。此项目类型只是 WcfSvcHost 和 WcfTestClient 的预构建用法,与我前面提到的技术(将两者合二为一)非常类似。请注意,使用 WCF 服务库模板,就不需要将 WcfSvcHost.exe 指定为启动程序或 .config 文件,因为项目文件包含适用于 WCF 服务库的新 ProjectTypeGuids 元素。
但是该模板有一个负面影响:停止调试程序不会终止测试客户端;时间久了,您的桌面会由于孤立客户端而变得杂乱。要解决此问题,只需还原到前面清晰介绍的手动步骤。
WCF 服务库还提供了一个用于服务约定、服务约定的实施及匹配的 .config 文件的简单模板。
利用聚合服务库,您可以通过 WCF 终结点实现 RSS 源,并且可以从返回源的简单服务约定、服务约定的实施及匹配的 .config 文件着手操作。您可以托管和显示自己的源,与托管和显示任何其他服务一样。聚合终结点使用新的 WebHttpBinding 绑定。此新绑定旨在用于接收 Web 请求,而不能用于常规服务调用。
使用“顺序工作流服务库”模板,您可以将终结点的约定操作作为工作流活动来实现,或者将工作流显示为服务。项目将包含一个用于实现简单约定和匹配的 .config 文件的顺序活动。尽管客户端也将与类似传统终结点的终结点进行交互,但其实现完全是工作流驱动的。
“状态机工作流服务库”模板使用状态机而不是顺序工作流来实施其操作(触发状态转换)。工作流项目模板使用 WcfSvcHost 和 WcfTestClient,如同普通 WCF 服务库那样。工作流模板还使用新的上下文绑定对工作流实例 ID 的传递进行管理,从而支持持续工作流。我将在以后的专栏中详细介绍这些绑定。
|