65.9K
CodeProject 正在变化。 阅读更多。
Home

探索 WCF 3.5 工具 - WcfSvcHost 和 WcfTestClient

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.73/5 (8投票s)

2008 年 2 月 3 日

CPOL

6分钟阅读

viewsIcon

112469

downloadIcon

1551

讨论 WCFSvcHost 和 WcfTestClient 在服务托管和测试中的应用。

引言

Windows Communication Foundation 3.5 于 2007 年 11 月公开发布,它利用了 .NET 3.0 中提供的现有 WCF 库,并对微软的分布式应用程序开发框架套件进行了进一步增强。Windows Communication Foundation 是迄今为止 .NET 平台上提供的最全面的分布式应用程序开发框架,它具有互操作性、健壮性、可伸缩性和易于开发的特点。底层的基础设施主要由 WCF 库处理,因此开发人员可以专注于创建业务逻辑,而无需担心通信所需的协议、套接字和绑定。

在 WCF 3.5 中,突出的增强功能可列举如下:

  • 添加服务引用增强功能
  • 各种新工具
    • WCF 提供的测试客户端
    • WCF 提供的宿主
  • UriTemplates 支持
  • 将 webHttpBinding 添加到绑定堆栈。
  • 支持 REST 风格的服务
  • 为服务创建 RSS & ATOM Feed
  • 更多 WS-* 协议
  • 在部分信任环境中提供对 WCF 的更好支持
  • ASP.NETAJAX支持消耗 WCF 服务
  • Ajax 集成和 JSON 支持
  • 工作流和 WCF 之间更好的集成

本文的重点是探索 WCF 3.5 提供的两个实用工具:WcfSvcHost 和 WcfTestClient。

背景

对于任何了解 WCF ABC(地址、绑定和配置)的人来说,显而易见的是,典型的 WCF 库需要两个组件才能暴露和消耗:一个服务宿主和一个消耗客户端。WCF 库本身可以简单地定义为一段业务逻辑,封装了支持合约和版本控制等更高级功能的属性;但是,服务的实际暴露取决于宿主应用程序或服务。

WCF 3.0 支持多种托管 WCF 服务的方式,包括 IIS 托管、自托管、WAS(Windows 激活服务)和 Windows 服务托管。托管选项的简单 breakdown 如下:

操作系统

支持的协议

托管选项

Windows XP

HTTP

命名管道、TCP、MSMQ

IIS 5.1 或自托管

自托管

WindowsVista

HTTP、命名管道、TCP、MSMQ

HTTP

IIS 7.0/WAS 或自托管


IIS 6.0

Windows Server 2003

HTTP

命名管道、TCP、MSMQ 自托管、HTTP

IIS 6.0

自托管

Windows Server 2008

HTTP、命名管道、TCP、MSMQ

IIS 7.0/自托管

绑定以及有关服务终结点和宿主的更多详细信息在 config 文件中使用 System.ServiceModel 类中的以下四个元素定义:

  • Services:此元素包含一个或多个 <service> 定义。每个 <service> 部分都与特定的服务类型相关联,并包括要为该类型暴露的任何基地址和终结点。
  • Client:此元素包含一个或多个 <endpoint> 定义,用于客户端可能消耗的每个服务终结点。每个单独的 <endpoint> 都包含一个与服务终结点匹配的地址、绑定和契约。
  • Bindings:此元素包含一个或多个绑定配置部分。这使得可以自定义绑定,而不是使用标准绑定(如 webHttpBinding)提供的默认值。
  • Behaviors:此元素包含 <serviceBehaviors> 和 <clientBehaviors>。在宿主端,<service> 配置部分可以引用 <serviceBehaviors> 部分中的元素,以将本地行为设置应用于服务。在客户端,<client> 部分中定义的终结点可以引用 <clientBehaviors> 部分中的元素,以将本地行为设置应用于客户端通信通道。

因此,服务可以具有多个终结点,如下面的示例所示。

<host>
<baseAddresses>
<add baseAddress="https://:8000/WCFInsiders" />
<add baseAddress="net.tcp://:9000/ WCFInsiders" />
<add baseAddress="net.pipe:/// WCFInsiders" />  
</baseAddresses>   
</host>  

使用 WcfSvcHost 和 WcfSvcClient

现在,无需为每个项目创建测试客户端和宿主,这两个新工具 WcfSvcHost 和 WcfTestClient 使我们能够无缝测试服务,而无需编写额外的代码或依赖于特定的绑定。这两个实用工具都可以在这里找到。

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

首先,您可以在 Visual Studio.NET 2008 中创建一个简单的 WCF 服务库项目。

WCFLibrary_dialog.JPG


WcfSvcHost 的语法如下。

Usage: WcfSvcHost.exe /service:<PathToServiceDLL>  /config:<PathToServiceConfig> [/client:<pathToClientApp>][/clientArgs:<argumentsToBePassedToClientApp>]


正如您可能注意到的,方括号中的参数是可选的,因此,一个简单的调用可以是:

WcfSvcHost /Service:MySampleService.dll /config:app.config


在本文提供的示例中,命令行如下:

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>WcfSvcHost /service:c:\Development\MySampleService\MySampleService\bin\Debug\MySampleService.dll /config:c:\Development\MySampleService\MySampleService\App.config

WCFService_Host.JPG


启动服务宿主后,您将获得一个元数据终结点,可用于启动客户端。对于 MySampleService,mex 终结点是:

http://localhost:8731/Design_Time_Addresses/MySampleService/Service1/mex


WcfTestClient 的典型语法是:

WcfTestClient.exe <ServiceMetaDataURI>


您可以指定任何元数据地址,例如 HTTP-GET,或通过 HTTP、TCP 或 IPC(命名管道)的元数据终结点。也可以指定多个元数据地址,如下面的语句所示:

WcfTestClient.exe http://localhost:8000/ net.tcp://:9000/MEX


现在可以使用以下命令调用测试客户端。

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>WcfTestClient http://localhost:8731/Design_Time_Addresses/MySampleService/Service1/mex

WCF_Test_Client.JPG


Windows Communication Foundation (WCF) Test Client (WcfTestClient.exe) 是一个工具,它允许通过通用的用户界面测试服务,而无需编写任何自定义代码。它还会显示从服务返回的响应。

WCF 服务宿主可以托管以下 WCF 服务项目类型:

• WCF 服务库
• WCF 服务
• 顺序工作流服务库
• 状态机工作流服务库
• WF 状态机服务
• WF 顺序服务
• XAML WF 状态机服务
• XAML WF 顺序服务
• RSS / ATOM 库
• WAP 服务
• 网站服务。

结论。

这两个工具最大的好处之一是它们独立的执行能力。它们可以从命令行外部使用 Visual Studio,这使得它们在测试环境中的选择非常有价值,因为在这些环境中,Web 服务器不可用,或者设置它需要进行很多繁琐的操作。使用这些实用工具使得托管和测试 WCF 服务更加容易。随着在基础测试中的大量实际应用,我希望开发人员能在日常工作中发现这些工具的用处。

关于作者

Adnan Masood 在一家位于 Monrovia 的金融机构担任高级软件工程师/技术主管,他使用 Microsoft .NET Framework 开发中间层架构、分布式系统和 Web 应用程序。他拥有多个专业会员资格(ACM、BCS 和 ACS)以及多项技术认证,包括 MCSD.NET、MCAD.NET 和 SCJP-II。Adnan 的作品在印刷媒体和网络上均有署名和发表,并拥有 Nova Southeastern University, FL 的计算机科学硕士学位,目前正在攻读机器学习博士学位。Adnan 曾在加州大学圣地亚哥分校教授 WCF 课程,并定期在当地代码营作报告。他积极参与 .NET 社区,是 San Gabriel Valley .NET Developers 组织的联合创始人兼主席。他的博客可在 www.AdnanMasood.com 上找到,可通过电子邮件 adnanmasood at acm.org 联系。

参考文献

HTTP 编程与 WCF 和 .NET Framework 3.5 - Justin Smith
http://msdn.microsoft.com/msdnmag/issues/08/01/WCFinOrcas/default.aspx

Visual Studio 2008 中 WCF 的新功能Juval Lowy
http://msdn.microsoft.com/msdnmag/issues/08/02/Foundations/default.aspx

Mix 2007 Don Box 和 Steve Maine 的演讲“DEV03 - 导航可编程 Web” http://sessions.visitmix.com/default.asp?event=1011&session=2012&pid=DEV03&disc=&id=1512&year=2007&search=DEV03

© . All rights reserved.