定义:
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”,此服务契约中对外提供了三个可调用的方法,我们可以调用。
运行到这里,我们的服务类就建立好了。