WCF学习第一天
wcf概念:Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。它是.NET框架的一部分,由 .NET Framework3.0 开始引入,与 Windows Presentation Foundation及 Windows Workflow Foundation并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库。在 .NET Framework2.0 以及前版本中,微软发 展了 Web Service (SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如 .NET Remoting 可以开发 SOAP, HTTP 通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。(个人总是认为wcf就是Web Service的升级版本(个人只用过Web Service),用于解决各系统通信对接的)
WCF协定:
服务协定:服务协定将多个相关的操作联系在一起,组成单个功能单元,服务协定中可以将类标识为服务协定也可以将接口标识为服务协定,服务协定用ServiceContract属性来标识,一般在设定服务协定的时候都将接口设为服务协定,因为其有如下优点:
1,服务协定接口可以扩展任何数量的其他服务协定接口
2,类可以通过服务协定接口来实现任意数量的服务协定
3,更容易实现服务协定的重构
[ServiceContract]//服务协定标识 public interface IService1 { }
操作协定:操作WCF协定定义参数并返回操作的类型。 在创建定义服务协定的接口时,可以通过将 OperationContractAttribute 属性应用于协定中包含的每个方法定义来表示一个操作协定。可以将操作建模为采用单个消息作为参数并返回单个消息,或者建模为采用一组类型作为参数并返回一 个类型。在后一种情况下,系统将确定需要为该操作交换的消息的格式。
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 [ServiceContract] public interface IService1 { [OperationContract]//操作协定标识 string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); }
类数据协定:服务使用的数据类型必须在元数据中进行描述,以使其他各方可以与该服务进行交互操作。 在WCF协定中,数据类型的说明称为数据协定,而这些类型可以在消息的任何部分使用(例如,作为参数或返回类型)。 如果服务仅使用简单类型,则无需显式使用数据协定。数据协定用DataContract属性来标识
[DataContract] //数据协定标识 public class CompositeType { }
属性数据协定:其是类数据协定的组成部分,用DataMember属性来标识
[DataContract] public class CompositeType { [DataMember] //属性数据协定 public bool BoolValue{get;set;}
public string Name{get;set;}//没有添加DataMember进行标识则在无法在服务中被序列化 }
建立一个简单的wcf服务并在客服端调用
新建之后就有下列目录文件:
然后添加一个客服端控制台应用程序:
右击控制台应用程序添加服务引用并发现服务:
添加服务之后会在控制台应用程序里自动添加服务代理类和dll
System.Runtime.Serialization 命名空间包含可用于将对象序列化和反序列化的类。 序列化是将对象或对象图转换为线性的字节序列以存储或传输到其他位置的过程。 反序列化是接受存储的信息并利用它重新创建对象的过程。
System.ServiceModel提供类与服务与设计相关。
在Main入口调用wcf服务
将控制台应用程序设为启动项目启动
客服端调用成功
本文为个人学习所用,指教...