初探WCF ----基本知识的理解

本文涉及内容: 

  1. 理解面向服务
  2. 什么是WCF
  3. 理解契约式编程
  4. 常见的几个消息交换模式
  5. 使用配置文件部署服务
  6. 使用代码部署服务

一、理解面向服务(Service-Oriented-Architecture)

     是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。SOA指出当前系统应该足够灵活,从而允许在不打乱当前成功运行的体系结构和基础结构的前提下,改动已有的体系结构。
      SOA原则:
            边界清晰
            服务自治
            兼容性基于策略
            共享模式(schma)和契约

二、什么是WCF

  WCF(Windows Communication Foundation)是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口。

      根据MSDN上的定义:WCF为.NetFramework 提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。

      WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。WCF具有如下的优势:1、统一性     2、互操作性    3、安全与可信赖   4、兼容性

   如图:

三、理解契约式编程

  契约合同能保障双方的利益,对客户来说,合同规定了供应者要做的工作;对供应者来说,合同说明了如果约定的条件不满足,供应者没有义务一定要完成规定的任务。该道理同样也适用于软件. 所以,契约式编程是编程的一种方法。

      WCF服务契约    服务契约描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceModel 。接口类中契约标示属性ServiceContract,行为标示属性OperationContract,以及DataContract、DataMember属性。

四、常见的几个消息交换模式

  1.请求-响应模式  (Request/Reply)  

         这种交换模式是使用最多的一中,它有如下特征:

    1).调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型  2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了。 3).在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明。

          它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式

    [OperationContrac]

    void Test(int intVal);  

 

  2.单工消息处理模式  (One-Way Calls

    在这种交换模式中,存在着如下的特征

    1).没有返回值,返回类型只能为void  2).不能包含ref或者out类型的参数  3).只有客户端发起请求,服务端并不会对请求进行回复。

    通过设置OperationContract的IsOneWay=True可以将满足要求的方法设置为这种消息交换模式,方法如下:

      [OperationContract(IsOneWay=true)]

      void Test(int intVal);

     

  3.双工消息处理模式  (Duplex)

    注意,这种方式和request/reply方式的图示也很类似,当二者存在着至关重要的不同,它在客户端也有监听节点,在callback的时候,服务器和客户端的角色会进行交换,服务端此时成了严格意义上的客户端,而客户端此时能接受服务端的callback请求,所以成为了服务端。呵呵,辩证法,都拗口死了,当事实就是这种,就像对与错一样,会相互转换,失败是成功之母,而成功是失败之源。

    Duplex的特征主要包括 :1).消息交换过程中,服务端和客户端角色会发生调换  2).服务端处理完请求后,返回给客户端的不是reply,而是callback请求。 关于消息交换模式还有流模式、发布-订阅模式,这里只抛砖引玉,具体的简介请查阅相关资料.

五、使用配置文件部署服务

  1.服务的三要素(ABC)  A:Address 意味着在哪里(也含有传输方式信息) ; B:Binding 意味着怎么做(与地址的传输方式要匹配); C:Contract意味着做什么(服务契约)

  2.端点地址定义 (在配置文件中定义终结点地址)  

endpoint 服务和终结点
binding 绑定(可选)
behaviors 行为(可选)

  

 

 

配置文件如下:

View Code
 1 <system.serviceModel>
 2 <services>
 3 <service
 4 name="CalculatorService"
 5 behaviorConfiguration="CalculatorServiceBehavior">
 6 <host>
 7 <baseAddresses>
 8 <add baseAddress="http://localhost:8000/service"/>
 9 </baseAddresses>
10 </host>
11 
12 <endpoint address=""  binding="wsHttpBinding"  contract="Samples.ICalculator" />
13 
14 <endpoint address="/test"  binding="wsHttpBinding"
15 contract="Samples.ICalculator" />
16 
17 <endpoint address="net.tcp://localhost:9000/service"
18 binding="netTcpBinding"
19 contract="Samples.ICalculator" />
20 </service>
21 </services>

六、使用代码部署服务

  1.服务的三要素(ABC)  A:Address 意味着在哪里(也含有传输方式信息) ; B:Binding 意味着怎么做(与地址的传输方式要匹配); C:Contract意味着做什么(服务契约)

   2.主要的系统内置绑定(Binding)  如图:  

    

  3.代码:  

1             
2             ServiceHost host = new ServiceHost(typeof(winServer.myClass));
4             NetTcpBinding tcpBind = new NetTcpBinding();
5             string address = "net.tcp://localhost:8100/test";
6             host.AddServiceEndpoint(typeof(ClassLibrary.Interface), tcpBind, address);
7             host.Open();
8        

  

  写此篇博文主要是相对自己对WCF的知识点进行一个总结,只有总结才会发现新的突破点,才会发现自身的不足之处.继续总结中...

 

 

    

 

 

  

  

 

posted @ 2012-11-14 15:49  Aaronguo  阅读(248)  评论(0编辑  收藏  举报