WCF的全称是Windows Communication Foundation,从英文名称上看,WCF就是基于Windows下一种通讯的基础架构。利用WCF能够实现基于Windows下的各种通讯技术的开发以及应用。WCF是面向服务的,它是构建面向服务的系统设计。简化实现SOA的方法。WCF也是松耦合,并没有限制在特定协议、编码格式、或者主机环境上。还有WCF所有的选项都是可配置的。WCF也提供了非常好的可交互性,主要体现在两个方面,一个是支持Web Service的核心标准,另一个是在可扩展性方面能够快速适用新协议和更新。WCF强调了整合性,整合了Microsoft早期期技术。如COM、Enterprise Services,MSMQ。
本文就介绍下WCF入门以及宿主如何调用WCF服务。在这个例子中我们将使用VS 2012 创建一个WCF服务,其中会了解[DataContract] [ServiceContract] 等的特性以及通过内置的 WCFSVCHost ,并使用“WCF测试客户端”来测试我们创建的服务。最终在不同的宿主上调用该WCF。
注意下面的所有类、接口及方法都添加了public 的访问级别。
1、 创建WCF服务库,如下图所示
在解决方案中会自动为我们生成两个类文件“IService.cs”和“Service.cs”。这两个类文件是两个WCF示例文件,对我们开发没有什么用处,现在我们删掉这两个文件。
2、新建类文件
在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“Person.cs”。
同时也要创建服务接口,声明对外发布的类和方法,名称为“IPersonService.cs”,再创建“PersonService.cs” 如下图所示:
其中,Person.cs提供所需要的模型。代码如下:
using System.Runtime.Serialization; namespace WcfServiceLibrary1 { [DataContract] public class Person { [DataMember] public string Id; [DataMember] public string Name; [DataMember] public int Age; } }
IPersonService.cs文件创建服务接口,声明对外发布的类和方法。代码如下:
using System.Collections.Generic; using System.ServiceModel; namespace WcfServiceLibrary1 { /// <summary> /// ServiceContract:服务约定,代表我们所能操作的接口集合,提供功能点。 /// 在IPersonService接口上面,我们定义了[ServiceContract]标签,此标签代表此接口及实现此接口的类都是对外发布的Service类, /// 在每个需要对外发布的方法上都加上[OperationContract]标签,以使外部可以访问到此方法。 /// [ServiceContract]和[OperationContract]这两个标签需要导入using System.ServiceModel命名空间。 /// </summary> [ServiceContract] public interface IPersonService { /// <summary> /// OperationContract 操作约定,定义每个操作的接口点方法。 /// </summary> [OperationContract] void AddPerson(Person person); /// <summary> /// 获取所有的实体的方法 /// </summary> /// <returns></returns> [OperationContract] List<Person> GetAllPersons(); /// <summary> /// 删除某个实体的方法 /// </summary> /// <param name="id">实体id</param> [OperationContract] void RemovePerson(string id); } }