zoukankan      html  css  js  c++  java
  • 初探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的知识点进行一个总结,只有总结才会发现新的突破点,才会发现自身的不足之处.继续总结中...

        

      

      

  • 相关阅读:
    抽签问题及优化
    P1020
    p1852ants
    1,三角形
    TG3
    如何看懂一篇题解
    Unsupported major.minor version 51.0 错误解决方案
    weblogic初学笔记2-在Linux上部署项目
    一块移动硬盘怎样兼容Mac和Windows系统,并且可以在time machine上使用
    org.hibernate.HibernateException: connnection proxy not usable after transaction completion
  • 原文地址:https://www.cnblogs.com/aaronguo/p/2770043.html
Copyright © 2011-2022 走看看