WCF学习之旅-创建第一个服务

Posted 夜月天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WCF学习之旅-创建第一个服务相关的知识,希望对你有一定的参考价值。

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初始学习结束。

 

以上是关于WCF学习之旅-创建第一个服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF学习之旅—WCF概述

WCF学习之旅—WCF服务配置(十四)

WCF学习之旅—第三个示例(二十七)

WCF学习大全

WCF学习之旅—WCF4.0中的简化配置功能(十五)

WCF学习之旅—实现支持REST客户端应用(二十四)