WCF学习杂记-Getting Started

学习方法是一边读Juval lowy的WCF编程一边学习MSDN提供的Windows Communication Foundation (WCF) Samples,这个Sample系列有好多个版本,这里链接的是最新的基于.NET4.0的版本,里面提供的例子均不需要特别在IIS里部署就可以直接运行,这点比上一个版本要强很多。

Basic的第一个例子是Getting Started Sample,这里没有特别需要记住的,采用的是BasicHttpBinding,这种绑定能将WCF服务公开为传统的ASMX Web服务,使得旧的客户端能够与新的服务协作,另外,有几点可以mark一下:

  1. 1. 这里采用的是MS推荐的Coding方法,先定义接口,再定义具体实现类,其实这也是良好的架构的基础,可以实现深度特化、松散耦合,精细调整以及契约的重用(很深奥吧,呵呵,筒子们自己领悟,偶也不是一个很好的架构师),契约定义在接口上;
  2. 2. WCF允许我们直接将ServiceContract特性应用到服务类上(与上面的定义在接口上相对应),但应该尽量避免这样的定义,而应该定义一个单独的契约,这有利于在不同场景下使用契约;
  3. 3. 使用Visual Studio 2010创建WCF应用的筒子会发现,2010会自动把接口和实现类分到Iservice.cs和service.svc.cs上,Getting Started Sample里没有采用service.svc的codebehind方法,而是使用了service定义:
  4. <%@ ServiceHost language=”C#”Service=”Microsoft.Samples.GettingStarted.CalculatorService”%>
  5. 最后,WCF支持重载,但需要标记[OperationContract (Name=”alias”]来实现,且导入的客户端代理和契约也要做相应的调整;

顺便提一下客户端调用服务的实现方法,客户端首先需要导入服务到客户端的本地描述(Native Representation)中。如果客户端使用WCF,调用操作的的常见做法是使用代理。要生成代理,最简单的莫过于通过Visual Studio,如果服务托管在IIS或WAS,则无须预先启动服务;只需要从客户端项目的快捷菜单中选择“Add service reference”, Visual Studio就会弹出Add Service Reference对话框,为了让Add Service Reference选项显示在项目的快捷菜单中,项目必须将.NET Framework的目标版本配置为.NET Framework3.0以及更高版本。

另外,做为Visual Studio的一个替代,你可以使用命令行共居SvcUtil.exe导入服务元数据并生成代理。如果服务MyService托管在IIS或WAS上,并且允许基于HTTP-GET发布元数据,则只需运行下列命令行:

SvcUtil http://locahost/MyService/MyService.svc  /out:Proxy.cs

需要注意的是,无论使用以上那种方法,都会默认生成客户端配置文件(如app.config, web.config),由于其在推断绑定值方面做的并不好,生成的配置文件可读性很差,针对后者,可以通过开关控制不生成配置文件:

SvcUtil http://locahost/MyService/MyService.svc  /out:Proxy.cs /noconfig

 

再进一步,WCF提供了配置文件的编辑器SvcConfigEditor.exe,它既能编辑宿主配置文件,又能编辑客户端配置文件,启动编辑器的方法是在Visual Studio中,右键单击配置文件(客户端或宿主),然后选择”Edit WCF Configuration”(由于Visual Studio 2008的一个Bug,事实上2010 Beta2也存在同样的bug,你需要首先从Tools菜单中启动编辑器),Lowy特别提到,“对于SvcConfigEditor,我抱有一种复杂的心情,左右为难。一方面,它可以帮助开发者轻松快捷地编辑配置文件,从而节约了掌握配置样式的时间。另一方面,它却不利于开发者对WCF配置的整理理解。多数情况下,采用手工方式对配置文件进行细微的修改,要比之用Visual Studio 2008(笔者使用的是2010 Beta2)更加快速”

posted @ 2010-05-03 17:32  JohnsonWang  阅读(345)  评论(0编辑  收藏  举报