首页 > 代码库 > WCF开发实战(一)---创建服务器类

WCF开发实战(一)---创建服务器类

定义: 


WCF(WindowsCommunication Foundation):一系列支持数据通信的应用程序框架。


内容包含三部分:地址(Adress)、绑定(Binding)和契约(Contract),简称ABC,即利用服务模型创建软件通信功能而遵循的三个步骤。


实例:


第一步:“创建WCF服务器”

VS中“文件”->“新建项目”->“项目类型”->"Visual C#"->"WCF"->"WCF服务库"

在WCF服务库的项目名称为“Services”。

点击确定后,在解决方案中自动为我们生成两个类文件‘IService.cs“和”Service.cs“。



删除这两个实例文件。


第二步:创建Book实体类

在“解决方案窗口”中,我们右击Services项目名,添加一个类,类名为“Book.cs”.

Book类:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Services
{
    [DataContract]//标签作用是保证此类在WCF调用中能够被序列化,我们在Book类上面加入DataContract标签,在每个需要徐磊话的成员变量上加入【DataMember】标签,这两个标签使用的时候需要导入usingSystem.Runtime.Serialization命名空间。
    
    public class Book//服务中传输的复杂的数据类型Book
    {
        [DataMember]
        public string BookNO;
        [DataMember]
        public string BookName;
        [DataMember]
        public decimal BookPrice;
    }
}</span>

第三步:创建服务接口

声明对外发布的类和方法:添加类,类名为:IBookService.cs

IBookService类:


<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Services
{
    [ServiceContract]
    //在接口上面,我们定义了serviceContract标签,此标签代表此接口及实现此接口的类都是对外发布的Service类,在每个需要对外发布的方法上都加上【OperationContract】标签,意识外部可以访问到此方法,【ServiceContract】和【OperationContract】这两个标签需要导入using System.ServiceModel命名空间。
    public interface IBookService
    {
        [OperationContract]
        void AddBooks(Book book);

        [OperationContract]
        List<Book> GetAllBooks();

        [OperationContract]
        void RemoveBook(string id);
    }
}</span>

第四步:创建实现服务接口的类

实现上面我们定义的服务接口,实现对Book的添加、删除和检索的具体功能:添加类:BookService.cs

BookService类:


<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Services
{
    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]//这个标签代表这个类采用了SingleTone(单类模式)来生成对象。
    public class BookService : IBookService//对于IBookService接口的具体实现
    {
        List<Book> _Books = new List<Book>();
        public void AddBooks(Book book)
        {
            book.BookNO = Guid.NewGuid().ToString();
            _Books.Add(book);
        }

        public List<Book> GetAllBooks() 
        {
            return _Books;
        }

        public void RemoveBook(string id)
        {
            Book book = _Books.Find(p => p.BookNO == id);
            _Books.Remove(book);
        }
    }
}</span>

第五步:配置WCF服务

首先我们要“启动”项目,生成Services.dll

到目前为止,我们建立好了WCF,如何让WCF服务主机理解我们编写的服务类,并能够运行我们编写的服务。我们需要在App.config里面注册一下我们的WCF服务。右击App.config文件,选择”编辑WCF配置“弹出窗体:



从上图中,我们可以看到界面中暴露两个对外的终结点(外部可以访问到类或借口),其中下面一个是元数据终结点,用来向外提供服务信息的终结点。而另一个(即上面的终结点),是向外公布我们编写的[ServiceContract]的类,但我们可以看到它的Contract还是我们在第一步中删掉的Services.IService1这个终结点。不仅如此,在右侧的服务中还依旧是我们在第一步中删除的Services.Service1服务。这说明虽然在第一步中我们删除了那两个自动生成的类文件,但配置文件中仍没有删除这两个类文件的配置信息。


如何改变?

单击左侧的“服务” -> "Service.Servicel" 在右侧的Name,弹出"服务类型浏览器",按步骤来:








这样我们就可以把对外公司的服务改变为我们刚编写的服务了。


“服务” -> “Services.BookService”->“终结点”,单击第一个“空名称”,从右边的“终结点属性”中的Contract中我们可以看到,这里的Contract仍然用的是Services.IService1。




按照上面的说法,找到此WCF服务项目编译出来的Services.dll,双击找到对应的ServiceContract点击确定就可以了。

约定类型浏览器中显示“Service.IBookService”.



保存配置文件,我们对WCF配置算是完成了。



第七步:运行WCF进行测试

在VS2013中为我们提供了测试WCF的工具,按F5启动WCF会出现两个东西。





“测试客户端”从WCFSVCHost中取得WCF服务的元数据,解析为右侧的“服务结构树”,从这里我们可以看到此WCF服务为我们提供了一个服务契约“IBookService”,此服务契约中对外提供了三个可调用的方法,我们可以调用。



























WCF开发实战(一)---创建服务器类