WCF基本介绍:http://baike.baidu.com/link?url=TGjLYt3HS4dt4-hIiGRknLy6udRsZ52QxJz9cmRKlR4NXbP9rCZDsKn2fDfGeBEfyQL9XlTMy_aW4Zno3HEkKa
WCF有三种通信模式:单向、请求-响应、双工。这些通信模式留待后面再继续学习和讲解。
今天要学习的是创建一个测试的demo,所谓的hello world入门级程序。OK,let's start!
1、创建解决方案和项目
打开vs2015,文件》新建》项目,选中WCF服务应用程序。如下图:
项目成功创建之后出现的界面。如下图:
2、创建自己的服务StudentService。如下图:
在vs2015中,添加一个wcf服务,IDE会建立两个文件,一个是接口文件IStudentService.cs,另一个是服务类文件StudentService.svc。如下图:
我们一般习惯在IStudentService.cs接口文件中定义服务契约和操作契约,然后让StudentService.svc中的服务类StudentService继承该接口。
在开始编码之前,我们需要先创建操作的基本模型类。在模型类中定义数据契约。定义数据契约的目的,是让模型类可以在通信中被序列化传输。
新建一个文件夹Model来存放模型类。其实模型类可以通过其他类库的方式建立,然后让该项目引用,类似三层架构模式。这里只是为了演示和初步学习。
Student类如下定义。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Web; namespace FirstWcfDemo.Model { [DataContract] public class Student { [DataMember] public string ID { get; set; } //学号 [DataMember] public string Name { get; set; }//姓名 [DataMember] public int Age { get; set; } //年龄 } }
做接口的目的,就是用来传送数据。接下来,我们定义一个数据库操作类DbService。可以在此类中模拟数据源。
using FirstWcfDemo.Model; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace FirstWcfDemo { public class DbService { private List<Student> _students = new List<Student> { new Student {ID="2017001",Name="赵紫馨",Age=20 }, new Student {ID="2017002",Name="李晓欢",Age=19 }, new Student {ID="2017003",Name="张洪铭",Age=21 }, new Student {ID="2017004",Name="封越",Age=22 }, new Student {ID="2017005",Name="王琪乔",Age=18 } }; public Student Select(string ID) { return _students.Where(stu => stu.ID == ID).SingleOrDefault(); } public List<Student> SelectAll() { return _students; } } }
接下来操作IStudentService接口。代码如下:
using FirstWcfDemo.Model; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace FirstWcfDemo { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IStudentService”。 [ServiceContract] public interface IStudentService { [OperationContract] void Add(Student student); [OperationContract] Student GetStudentByID(string ID); } }
然后,在StudentService.svc服务文件中实现接口中的方法。代码如下:
using FirstWcfDemo.Model; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace FirstWcfDemo { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“StudentService”。 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 StudentService.svc 或 StudentService.svc.cs,然后开始调试。 public class StudentService : DbService,IStudentService { public void Add(Student student) { } public Student GetStudentByID(string ID) { Student rc = null; try { rc = Select(ID); } catch (Exception ex) { //此处可以记录日志及相关异常操作 } return rc; } } }
OK!第一个服务应用程序的代码敲打完毕。接下来,就测试该服务。
3、测试服务
本次测试是一个很简单的测试。
第一步,右键单击服务文件StudentService.svc,选中在浏览器中查看。如下图:
然后在弹出的浏览器中显示如下图中相关服务的信息,说明服务正常开启。
在vs2015中,有一个专门用来测试WCF服务的测试客户端,名字叫WcfTestClient.exe。在vs2015之外,打开WcfTestClient.exe有两种方法:第一种是找到该应用程序所在目录,打开该应用程序;第二种是在"VS2015开发人员命令提示"打开,如下图:
打开WcfTestClient.exe应用程序后,其界面如下图所示:
选择 文件》添加服务,然后输入上面浏览器中该服务得地址,然后点击确定。如下图所示:
服务打开后如下图所示:
到此,我们就可以测试刚才建立的服务是否能够正常运行。
左键双击左侧面板的GetStudentByID()项,然后在右侧"请求"面板中输入ID值,点击"调用"按钮,则"响应"面板中会显示出服务的响应数据。如下图:
本篇文章讲述了从创建WCF解决方案和项目、创建服务页面、编码、创建服务程序和使用WcfTestClient.exe测试客户端的一整套过程。内容确实简单了一点。其中服务的创建还可以自己编写服务宿主程序,更可以部署到IIS上面,不过这些都是后话了。
至此,一个WCF初始学习结束。