Visual Studio 2008中WCF的新增功能(一)

2008-05-15 15:10:11.0     推荐:0    收藏:0    评论:0     来源:e800.net频道

WcfSvcHost 的目的就是在开发过程中不再需要使用独立托管程序集来配合服务库。诸如托管项目等的开发工作是一种重复任务,这些主机通常包含大量相同的代码行,当有多个服务库时,这些重复代码容易导致解决方案变得臃肿。为了便于开发和测试,可以将 WcfSvcHost 直接集成到您的 Visual Studio 2008 服务库项目中。在项目属性的“Debug”(调试)窗格中,将 WcfSvcHost.exe 指定为要启动的外部程序,然后将您的类库名及其 .config 文件(自动生成并自动复制到 bin 文件夹)指定为参数。

完成后,当您运行类库(完成上述操作后才能执行运行)时,它将借助该进程附带的调试器由 WcfSvcHost 自动托管。停止调试时,Visual Studio 2008 将以不妥当的方式中止托管。

您甚至可以在 .NET Framework 3.0 应用程序中与 Visual Studio 2005 项目一起使用 WcfSvcHost,由于 WcfSvcHost 只需要 .NET Framework 3.0,因此只需从安装了 Visual Studio 2008 的计算机上复制 WcfSvcHost 即可。为了使用更加方便,建议您将 WcfSvcHost 添加到 .NET Framework 3.0 计算机上的全局程序集缓存 (GAC) 中。

WcfSvcHost 的最后一个功能是能够自动启动客户端应用程序,甚至能够为客户端提供特定于该应用程序的可选参数:

WcfSvcHost.exe /service:MyService.dll /config:App.config
/client:MyClient.exe /clientArgs:123,ABC

此功能对于在自动测试、甚至是简单部署的情况下启动主机和客户端非常有用。

WcfSvcHost 的最大缺陷是只适用于简单情况,例如在打开主机实例之前无需以编程方式访问主机实例的情况,或在其打开之后以编程方式访问其事件模型的情况。与使用 IIS 或 Windows Activation Service (WAS) 进行托管不同,WcfSvcHost 没有对等的服务主机工厂支持。因此,不具备动态添加基址、配置终结点、中止调用以及在主机级别配置自定义行为等功能。通过我对 WCF 的使用体验发现,除了最简单的情况之外,所有其他情况中最终都需要以编程方式访问主机实例,因此我并不将 WcfSvcHost 视为一种成熟、高效的主机,而我自己执行 WAS 或进行专用自托管。

WCF 提供的测试客户端

除服务主机外,Visual Studio 2008 还随附了一个用于进行基本测试的简单通用的测试客户端,您可以使用它调用大多数服务上的操作。正常安装后,测试客户端 WcfTestClient.exe 位于 WcfTestClient.exe, is found after normal installation at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE 下。您必须为 WcfTestClient 提供一个命令行参数,其中包含要测试的服务的元数据地址:

WcfTestClient.exe http://localhost:9000/

您可以指定任何元数据地址,例如 HTTP-GET 或者 HTTP、TCP 或 IPC(命名管道)上的元数据终结点。也可以指定多个元数据地址:

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

WcfTestClient 是一个 Windows Forms 3.5 应用程序(参见图 3)。在此图中,左侧的树控件包含测试的服务及其终结点。您可以详细查看某个终结点的约定并选择某项操作。特定于该调用的信息将显示在右侧窗格的选项卡中。图 4 所示为一个简单约定及其实现的示例。

图3:使用WcfTestClient

您可以在方法选项卡的“Request”(请求)部分中输入作为操作参数的一个整数和一个字符串,如图 3 所示。单击“Invoke”(调用)按钮时,它将向服务调度调用,并在“Response”(响应)中显示返回值或输出参数。如果是单向操作,WcfTestClient 将在消息框中通知您已成功调度此操作。如果出现异常,WcfTestClient 将在消息框中显示异常信息,并让您发出其他调用。

Figure 4:示例服务

[ServiceContract]
interface IMyContract
{
[OperationContract]
string MyMethod(int someNumber,string someText);
}
class MyService : IMyContract
{
public string MyMethod(int someNumber,string someText)
{
return "Hello";
}
}

WcfTestClient 不使用测试服务来维护传输层会话(或任何其他会话)。所有调用均在新代理实例上进行。此外,所有调用均异步进行,这样 UI 能随时进行响应。但是,尽管是异步调用,WcfTestClient 只允许一次调度一个调用。

WcfTestClient 从代理文件(包括 .config 文件)以静默方式创建程序集,然后从临时位置加载该程序集。如果单击树中的“Config File”(配置文件)项,您可以获取该 .config 文件(添加服务引用时生成的同一 .config 文件),并可以将其显示其选项卡中。

[上一页]   [第1页]   [第2页]  
您可以针对本文进行:[评论]  [收藏]  [推荐]  
  • 共有0条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: