WCF初探-1:认识WCF
1.WCF是什么?
WindowsCommunication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由.NET Framework 3.0开始引入,与Windows Presentation Foundation及 Windows Workflow Foundation并行为新一代Windows操作系统以及WinFX的三个重大应用程序开发类库。
在.NETFramework 2.0以及前版本中,微软发展了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/HTTP/Pipeline communication)以及基础的Winsock等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如.NET Remoting可以开发SOAP, HTTP通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在用户有许多不便。同时,服务导向架构(Service-Oriented Architecture)也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是Windows Communication Foundation。
2.WCF能做什么?
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
3.WCF示例
我们通过VS2010自带的模板创建一个WCF程序,来认识一下WCF服务
第一步:打开VS2010,选择WCF模板中的"WCF服务应用程序",将解决方案的名称改为WcfTest,名称改为Service
第二步:创建完成后,解决方案中生成3个文件,服务契约接口和服务实现类,以及服务寄宿文件和配置文件
第三步:对服务进行寄宿,点击Service1.svc在浏览器中进行查看,既可以寄宿该服务
第四步:服务寄宿后,我们就可以查看其元数据的信息以及调用服务产生客户端代理类
点击链接就可以看到服务的元数据信息如下:
第五步:我们通过svcutil.exe工具生成客户端代理类和客户端的配置文件
svcutil.exe是一个命令行工具,位于路径C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin下,我们可以通过命令行运行该工具生成客户端代理类
1.在运行中输入cmd打开命令行,输入 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
2.输入svcutil.exe /out:f:\TestProxy.cs /config:f:\App.confighttp://localhost:10998/Service1.svc?wsdl(注意:端口号改成本机服务寄宿的端口号)
此时,你可以在你的f盘的根目录查看到你刚刚生成的客户端代理文件和配置文件TestProxy.cs 、App.config
第六步:创建一个控制台应用程序的客户端(Client),将生成的代理文件拷贝到该工程中(也可以点击引用"添加服务引用",靠VS2010自动生成客户端代理类)
此时你会看到客户端代理类中出现错误,原因是我们并未对服务需要的程序集进行引用。我们引用System.Runtime.Serialization和System.ServiceModel
在客户端的Program.cs中输入如下代码
设置客户端(Client)未启动项目,运行程序就可以看到第一个服务程序运行的结果
到此,我们完成了一个简介的WCF程序,下一篇,我们将自己手动编写一个wcf服务程序