一、WCF初学入门

      在说什么是WCF服务之前,我先来说一下什么是SOA思想。SOA全称是面向服务的体系结构(Service-oriented architecture)是构造分布式计算的应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它是一种组件架构模型。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。而WCF 就是基于SOA思想的其中一种实现方式。

  那什么是WCF? WCF的全称是: Windows Communication Foundation。从本质上来说,它是一套软件开发包,是Microsoft推出的符合SOA思想的技术框架。WCF给我们提供了丰富的功能,其中包括:托管、服务实例管理、异步、安全、事务管理、离线队列等。并且WCF对产业中的标准协议进行了封装和定义,它把程序员从繁琐的通信、格式编码中解放出来,使得程序员能够专注于业务逻辑的实现。同时,WCF统一了微软公司之前推出的多种分布式技术,其中包括:

  1. Web服务
  2. .Net Remoting。
  3. 微软消息队列(MSMQ)。
  4. 其他一些服务

WCF对这些技术的集成包括两个方面:

  1. WCF的架构本身吸取了这些技术的精华。
  2. 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>
配置文件

关于配置文件的一些说明看来只能作为评论来写了。

posted on 2015-03-07 12:19  Mr.YM  阅读(152)  评论(2编辑  收藏  举报

导航