wcf学习基础篇

  代码中的所有例子都可在 http://hi.csdn.net/heroyuchao中下载
以下篇章都是本人对WCF学习的一些总结与归纳,如果你有不同意见很乐意和你交流。
 
WCF 开发环境要求:如果是VS2008用户可以不安装其它组件,针对于VS2005用户要求先安装.net framework 3.0其它版本的不行,下载地址:
同时安装VS2005扩展组件,下载地址:
WCF 基础篇
在分布式系统的开发中通信是不可避免的,微软为分布式系统的开发推出了各种可以实现通信的技术,例如:WEBSERVICE,Remoting,MSMQ,EnterpriseService等,但是我们在完成一个完整的分布式系统的开发中往往要使用到上述多种技术的结合,WebService虽然好用但是它不能实际回调客户端的方法,不能实现分布式事务的传播,客户端也不能实现脱机调用服务的方法;Remoting可以实现客户端方法的回调,但是应用于.net平台,MSMQ能实现假异步的脱机调用,EnterpriseService能实现分布式事务,所以上述这些技术中没有一种是能实现企业级开发所需求的全部功能。WCF是微软推出的Windows通信基础它能轻松实现上述所有技术的集成,下面我主要讲述下如果使用WCF实现系统间的通信。
 
一、 WCF 之ABC:
A 就是address即地址,客户端要能同服务端通信就要知道服务端的地址,这个地址包括使用的协议(如:http,tcp),服务端监听的端口号(不是所有的协议都需求端口的,如:MSMQ),服务的名称。一个完整的address如:http://localhost:8888/MySerivce,net.tcp://localhost:8888/MyService。
 
B 就是binding即绑定,也就是用户用什么方法什么协议绑定,WCF支持的binding有很多,如:basicHttpBinding,wsHttpBinding,netTcpBinding。
 
C 就是Contract即契约,也就是告诉客户端能在服务端做什么,完成哪些操作。客户端很少会直接调用服务的,它们都是通过代理完成服务的调用操作,Contract是通过元数据(metadata)暴露出来的,客户端通address找到metadata将contact下载下来,contract在客户端就成代理了。
 
ABC 在WCF中我们会称为终结点(endpoint),所以一个完整的endpoint能描述地址,绑定,契约。
 
二、 WCF 之config

WCF是通过配制文件来读取ABC信息的,当然也能通过code的方式来实现。我们现在来看一下服务端的配制信息:

 

 

在这个配制文件中我们就要注意下endpoint,你能看到每个endpoint中都address,binding,contract的信息,但是address的信息好像不全,其实这个address是采用了一种相对寻址方式,因为我在baseaddress配制好了基地址 http://localhost:8888/MySerivce , 所以第一个endpoint的address就是 http://localhost:8888/MyService , 而第二个endpoint的address是 http://localhost:8888/MyService/Mex.第一个endpoint中的http 才是正真的通信协议,第二个endpoint中的mexHttpBinding是一种元数据转换协议,也就是用来暴露元数据用的。Mex是与其它协议配对使用的。如:netTcpBinding就必须用mexTcpBinding。要暴露元数据就必须有<serviceMetadata/>,它后面的httpGetEnable=true是为了客户端能够通过WebService的引用方法下载代理的,对于这个配制客户端可以使用添加 http://localhost:8888/MySerivce?wsdl Web 引用就可以了,当然如果支持WCF的客户端可以使用 http://localhost:8888/MyService 添加服务引用下载代理。配制文件可以通过WinFX中的一个工具来实现Service Config Editor。这个工具使用很简单,在这我就不讲了。
 
一、 WCF 之“Hello,World”
 
我通过一个“Hello,World”程序来结束这第一篇。
在安装了vs2005扩展wcf,wpf功能的系统中,我们就可以添加一个System.ServiceModel的引用,这个程序集能完成WCF操作所有操作。

下面我们来看看代码:

这段代码的功能很简单,只有一个类MyService,它实现了接口中的HelloWorld方法向客户端返回“hello,wolrd”,我们可以看到在接口义的上加了个属性[ServiceContract],也就是告诉这个接口是告诉系统这个接口是一个服务Contract,当然接口中的方法HelloWorld就是操作Contract。不是只有接口才能当契约的,类也可以,如果你不是采用面受接口的编程你只要把[ServiceContract]放到MyService,[OperatorContract]放到public string HelloWorld()的上面就行了。我们再来看看Main,我们定义了一个服务主机,并告诉主机我要发布MyService。调用下open方法,这样服务就运行起来的,呵呵,简单吧,当然,还在加上上面的配制文件。

 

客户端的实现:

首先我们要下载代理,如上面的配制我们的客户端可以添加web引用地址是http://localhost:8888/MyService?wsdl,就行了,调用方法与WebService一样,对于支持WCF的客户端可以添加服务引用http://localhost:8888/MyService,调用方法也与webservice一样,添加引用成功后就会在客户端加入代理和相应的配制信息

这是调用的代码:

这是代理:

这个配制好得复杂,不过都是自动生成的。我们也可以使用SDK的一个工具svcutil自动生成代理与配制文件,然后直接加了客户端使用就行了。

运行结果就是客户端输入了“Hello,World”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值