一、WCF初学入门
在说什么是WCF服务之前,我先来说一下什么是SOA思想。SOA全称是面向服务的体系结构(Service-oriented architecture)是构造分布式计算的应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它是一种组件架构模型。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。而WCF 就是基于SOA思想的其中一种实现方式。
那什么是WCF? WCF的全称是: Windows Communication Foundation。从本质上来说,它是一套软件开发包,是Microsoft推出的符合SOA思想的技术框架。WCF给我们提供了丰富的功能,其中包括:托管、服务实例管理、异步、安全、事务管理、离线队列等。并且WCF对产业中的标准协议进行了封装和定义,它把程序员从繁琐的通信、格式编码中解放出来,使得程序员能够专注于业务逻辑的实现。同时,WCF统一了微软公司之前推出的多种分布式技术,其中包括:
- Web服务
- .Net Remoting。
- 微软消息队列(MSMQ)。
- 其他一些服务
WCF对这些技术的集成包括两个方面:
- WCF的架构本身吸取了这些技术的精华。
- WCF开发的服务/客户端可以和现有的Web服务、MSMQ程序进行交互。
以上的理论知识,由搜索和自我理解的加工。那么接下来我就来做一个小小的实践。
1. 首先我们打开 vs2013,选择新建项目>WCF>选择WCF服务运用程序,这样就可以在解决方案资源管理中看到运用程序包括如图文件:
2. 接下来对代码进行了注释,一下是项目生成的代码和我自己添加的代码。
1 using System.Runtime.Serialization; 2 using System.ServiceModel; 3 4 namespace WcfServiceDemo 5 { 6 /// <summary> 7 /// 1.0 如果一个接口要作为WCF的服务接口,则必须标注 【ServiceContract】服务契约 特性 8 /// 所谓的契约,我个人理解就是约定,合同。要使用我就得按我的规矩办事。 9 /// </summary> 10 [ServiceContract] 11 public interface IService 12 { 13 14 /// <summary> 15 /// 2.0 操作契约,只有标注了 【OperationContract】特性的方法才能被其他程序或服务调用。 16 /// </summary> 17 [OperationContract] 18 string GetData(int value); 19 20 [OperationContract] 21 CompositeType GetDataUsingDataContract(CompositeType composite); 22 23 [OperationContract] 24 string SayYourName(string userName); 25 } 26 27 28 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 29 /// <summary> 30 /// 服务中使用的实体需要添加 【DataContract】作为数据契约,也就是在被调用的时候才可用 31 /// </summary> 32 [DataContract] 33 public class CompositeType 34 { 35 bool boolValue = true; 36 string stringValue = "Hello "; 37 38 /// <summary> 39 /// 实体类中的属性 需要标注 [DataMember] 特性才能被识别 40 /// </summary> 41 [DataMember] 42 public bool BoolValue 43 { 44 get { return boolValue; } 45 set { boolValue = value; } 46 } 47 48 [DataMember] 49 public string StringValue 50 { 51 get { return stringValue; } 52 set { stringValue = value; } 53 } 54 } 55 }
1 using System; 2 3 namespace WcfServiceDemo 4 { 5 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service”。 6 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service.svc 或 Service.svc.cs,然后开始调试。 7 public class Service : IService 8 { 9 public string GetData(int value) 10 { 11 return string.Format("You entered: {0}", value); 12 } 13 14 public CompositeType GetDataUsingDataContract(CompositeType composite) 15 { 16 if (composite == null) 17 { 18 throw new ArgumentNullException("composite"); 19 } 20 if (composite.BoolValue) 21 { 22 composite.StringValue += "Suffix"; 23 } 24 return composite; 25 } 26 27 public string SayYourName(string userName) 28 { 29 return string.Format("Your Name is {0}",userName); 30 } 31 } 32 }
1 <system.serviceModel> 2 <behaviors> 3 <serviceBehaviors> 4 <behavior> 5 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --> 6 <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 7 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> 8 <serviceDebug includeExceptionDetailInFaults="false"/> 9 </behavior> 10 </serviceBehaviors> 11 </behaviors> 12 <protocolMapping> 13 <add binding="basicHttpsBinding" scheme="https" /> 14 </protocolMapping> 15 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 16 </system.serviceModel>
关于配置文件的一些说明看来只能作为评论来写了。