VS2010搭建WCF之基础篇在看本篇之前,我先介绍以下代码和案例图片所运行的环境,如有不同,还请见谅:操作系统:win7旗舰版64位已装IIS,版本6.1(内部版本7600),(先装IIS后装VS2010)软件开发工具:VisualStudio2010专业版,版本10.0.30319.341,已打补丁,VS启动开发语言我选C#。和已安装什么是WCF?答:微软发展的通信方法有WebService(SOAPwithHTTPcommunication),.NETRemoting(TCP/HTTP/Pipelinecommunication)以及基础的Winsock等通信技术。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-OrientedArchitecture)也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是WindowsCommunicationFoundation。下面我们开始搭建WCF。1、创建程序文件夹:首先在D盘新建一个文件夹“Demo”。(啥,你没有D盘。。。吐血三百升)2、创建解决方案:打开VS2010,右上角菜单栏选择“文件、新建、项目、”在弹出的窗口左边区选择“windows”,然后窗口中部选择“空项目”窗口底部设置名称为“WcfDemo”,同时解决方案名称也会跟着一致,位置设置为第一步D盘创建的文件夹Demo,“为解决方案创建目录”打钩,最后单击“确定”,解决方案就新建好了。可惜不是完全真的空,里面还是带了一个类库项目,右键点击WcfDemo选择移除清了它。(D:/Demo/WcfDemo/WcfDemo文件夹也完全删除)3、新建合约层:合约是用来定义沟通的协议,共分四种。数据合约(DataContract),、服务合约(ServiceContract),操作合约(OperationContract),消息合约(MessageContract)。我们接下来要新建合约层,右键点击解决方案选择“添加,新建项目”选择“VisualC#,类库”名称为“Contract”,单击确定,完成新建Contract类库。右键点击类库“Contract”选择“添加,新建文件夹”,文件夹命名为“Model”,再重复一遍新建文件夹“IService”4、类库Contract添加引用:右键点击类库“Contract”选择“添加引用”选择“.NET”页签,找到并选择库System.Runtime.Serialization,System.System.ServiceModel“然后点击“确定”完成引用。5、新建一个数据合约文件夹:右键点击“Model,添加,新建项”,选择“类”,名称为“Car”点击“添加”完成添加Car类,去掉所有的using,然后引用System.Runtime.Serializationl类库,添加类的修饰符public声明为公开的。代码如下:6、新建操作合约:操作约合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口的派生类来实现。右键点击“IService,添加,新建项目”,选择“代码,接口”,名称为“ICarService”,单击“添加”完成。去掉所有的using,引用System.ServiceModel类库,接口添加修饰符public声明为公开。再添加几个方法,代码如下:右键点击类库“Contract”选择“生成”,到此,屏幕右下角出现“生成成功”表示编译成功,成功完成了合约层。7、新建WCF服务库:操作合约(OperationContract),订定服务提供的方法在这里的派生类具体实现。右键点击解决方案选择“添加,新建项目”,选择“WCF,WCF服务库”名称为“WcfServiceLib”,单击“确定”完成。删除两个没用的CS文件添加引用合约层Contract,右键点击“WcfServiceLib”选择“添加引用”选择“项目”页签,选择“Contract”,单击“确定”完成。8、创建实现操作合约(OperationContract)的派生类:右键点击类库“WcfServiceLib”选择“添加,新建项目”选择“VisualC#,类”,名称为“CarService”名称要和接口名一致,接口名去掉多余的using,引用合约层类库Contract和序列化类库继承操作合约接口,实现具体方法,代码如下:右键点击类库“WcfServiceLib”选择“生成”,到此,屏幕右下角出现“生成成功”表示编译成功。9、编辑WCF配置:如果你是高手,可以直接打开App.config文件更改配置,因为是菜鸟篇,所以下面会继续丰富的配图。右键点击“App.config”,选择“编辑WCF配置”点击两个“删除链接”,删掉多余的配置,左边区选择“WcfServiceLib.Service1”右边区选择“name”,点击“…”按钮,出现设置窗体因为成功编译过的,会有“bin”文件夹,点击“bin,Debug,WcfServiceLib.dll选择元数据ServiceLib.CarService,点击打开,完成此步设置。再左边区选择“WcfServiceLib.CarService”,点击左边的“+”号,选择“主机”在右边区选择第一条基址信息选择“编辑”再在左边区选择“WcfServiceLib.CarService”,点击左边的“+”号,右键点击“终结点”选择“新建服务终结点”,右边区设置:Name:CarServiceCFG(非必须)Binding:BasicHttpBinding改为WsHttpBinding默认情况下,BasicHttpBinding发送的是明文数据,而WsHttpBinding发送的是加密和更加安全的数据。Contract:点击“…”按钮打开设置窗体,点击“bin\Debug\Contract.dll”选择“Contract.ICarService”,对了,这个就是我们合约层建的操作合约的那个接口,选择“打开”完成此步设置。窗体头部菜单栏选择“文件,保存”关闭窗体后,VS2010会自动完成对“App.config”文件的修改。(如果你已打开“App.config”该配置文件,则会有提示“是否重新加载”,选择“全是”即可)至此完成编辑WCF配置的所有步骤。10、测试“WCF”服务库:右键点击“WcfServiceLib,设为启动项目”,然后选择“调试,启动新实例”,VS2010会开始启动调试,当屏幕下方任务栏出现这个标志表示你的代码已经被托管完毕,随之出现“WCF测试客户端”窗体,左键双击“AddCar()”在右边区赋值如下:然后点击调用,下方出现如图:表示CarService.AddCar()执行完毕。这时我们可以查看一下结果。在左边区鼠标左键双击“GetAllCars()”,在右边区点击“调用按钮”,这时会调用CarService.GetAllCars()并在右边区展示结果我们看到刚才输入的汽车信息已经在里面了。到此说明这个WCF库创建得非常成功,恭喜你!11、创建WCF服务应用程序:这是我们的WCF层;右键点击解决方案,选择“添加,新建项目”,选择“WCF,WCF服务应用程序”,名称为“WcfService”,点击“确定”按钮。删掉IService1.cs文件,和“Service1.svc.cs”文件。打开Service1.svc文件并编辑和保存,如图:保存后,为了规范重命名一下这个文件,重命名为CarService.svc,为WCF服务应用程序添加引用:右键“WcfService”选择“添加引用”选择“项目”页签,选中里面的“WcfServiceLib”类库点击“确定”,完成添加引用到此生成一下,完成编译。(“WcfServiceLib”也先生成一下。)接下来进行WCF配置,右键点击“Web.config”选择“编辑WCF配置”,弹出我们熟悉的配置窗体依然点击两个删除链接删除多余的配置,依然修改WCF服务指向的元数据,更改为我们自己的WcfServiceLib.CarService元数据,打开“+”号再打开“终结点”左边的“+”号,删掉一个终结点,选择空名称,在右边区进行设置,设置如图:选择“文件,保存”,关闭窗体。完成WCF配置。12、发布Wcf服务应用程序到IIS:右键“WcfService”,选择“属性”打开属性页,选择“Web”,滚动条下移,将“使用本地IISWeb服务器”打钩,然后点击保存,出现询问窗体,选择“是”,VS2010会自动在IIS添加此应用程序。打开IIS,(什么,不会打开IIS!开始控制面板管理工具Internet信息服务(IIS)管理器)里面我们就可以看到这个WCF服务程序了,有几个要注意的配置:看到应用程序池是DefaultAppPool,查看应用程序池,,NETframework版本要v2.0,托管管道模式要“经典”。这里有个题外话,为什么我们建的项目是3.5,却要可以在版本2.0上跑呢,因为3.5是在2.0的基础上继承扩展,3.5和2.0是亲兄弟,而4.0和2.0只是堂兄弟,所以这里要注意。回到VS2010我们的项目,用浏览器查看“CarService.svc”文件,如果能看到下图,恭喜你,WCF服务层建好了,我们先记下URL,、创建WEB服务层:我们来做一个简单的WebForm来使用WCF服务层,右键点击解决方案,选择“添加,新建项目”,选择“Web,ASP.NETWeb应用程序”,名称为“WebTestWS”点击“确定”,打开“Default.aspx”文件进行编辑,页面设计如图:代码详见DEMO;添加引用Contract合约层,点击“确定”完成引用Contract类库。添加引用WCF服务,选择“添加服务引用”,弹出引用窗体,还记得前面浏览器打开CarService.svc文件的URL吗,对了,填入地址栏,然后点击“前往”,就会发现我们的那个服务,再点击“确定”完成WCF服务的引用,接下来看看怎么使用WCF服务,我们看Default.aspx的cs文件,代码如图:通过新建实例对象carWcfClient,ServiceReference1.CarServiceClientcarWcfClient=newServiceReference1.CarServiceClient();就可以在Web服务端和Wcf端交互操作了,展示库存汽车信息:保存汽车入库信息:随附程序Demo,效果如图:如果有写错或说得不对的地方,欢迎指正!林松柏2013年3月423828918@qq.com