zoukankan      html  css  js  c++  java
  • WCF回顾一、基本概念和应用场景

    一、WCF描述

    wcf是一款基于面向服务的架构的通讯框架平台,在分布式框架中得到了广泛使用。 wcf入门非常简单,只要花几分钟就能编写一个完整的wcf程序,而实际上WCF是概念非常多的一门技术,需要花很大精力去深入研究。

    二、WCF优点

    1、将各种通讯技术进行整合

    WCF是对于 Web Service,Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合

    表示层可以基于 soap XML传输  和 rest  http调用

    传输层可以基于 http https tcp  pipe msmq (在都可以满足需求的情况下,我个人比较喜欢tcp从性能和灵活性方面的综合考虑)

    2、采用面向服务去实现,让编程变的更简单

    软件开发方法:面向过程编程—>面向对象—>面向组件开发—>面向服务架构

    面向服务优势:

    一个项目中,如果存在多种风格的技术、第三方DLL或者两种技术不能同一个系统下运行 这种情况下将变的难以维护和编码不雅,但是把这些功能全部分离到的一个服务项目,通过一个个的服务接口去调用,多个环境去发布,既做到了解耦又提高了内聚, 代码在烂眼不见心不烦。

    三、WCF基本概念

    WCF程序分为服务端客户端,WCF程序通过宿主托管到进程中,读取配置并启动服务,客户端通过代理类实现调用。

    1契约 :

     (1)服务契约:  暴露给客户端的一组接口,需要加上[ServiceContract]特性,客户端才可以调用该服务。

     (2)操作契约:  函数名加上[OperationContract],服务中才可以调用该函数。

    [ServiceContract]
        public interface IService1
         {
             [OperationContract]
            string GetData(int value);
     
              [OperationContract]
             CompositeType GetDataByData(DataClass dc);
           
         }
    

      

     (3)数据契约:  客户端和服务端传递的class需要加上属性[DataContract]标注为数据契约,在class的成员属性加上DataMember特性标注共享成员

    注意:即使不添加特性DataContract,仍然默认为DataContract,只有数据契约可以偷懒不写

    [DataContract]
    public class DataClass{ 
       [DataMember]   
        public double TotalPrice { get; set; }
    
     }
    

      

     (4)消息契约:这个比较有意思,网上说法很多,关于应用场景的相当少

                         我的理解:首先消息契约和数据契约一样都支持流,返回流还能带附带其它信息,这些数据契约一样做的到只是多几个属性摆了。

                         消息契约重点在消息这两个字,数据的特性是一致性,你是 “1” 我也是 “1” ,但是消息不同我可以说成是 “1” 也可以说成是 ”一“,区别在于多样化。

                         消息契约是将传输数据 指定到 soap head或者soap body,可以通过order对多个head或者body中的数据进行排序,还可以自定义一些消息格式让传输格式多样化,支持更多设备的接收, 还可以对head进行加密等操作。

                         数据契约所有数据都在一起,我们无法控制生成的soap是什么样子。

      注意每种契约都有各自的特性参数,这里就不介绍了

    2地址

    每个服务可以有多种传输协议,每种传输协议只能有一个调用地址

    比如 :

     http://192.168.1:800/Service1 

     net.tcp://localhost:8080/Service1

    3代理

     项目右键添加服务引,输入服务地址 便可以很方便的生成代理服务,也可以使用工具生成代理或者手写。

    4、WCF配置文件

    分为三块 bindings 、services和 behaviors

    1)services:

                          可以有多个service ,一个service代表一个服务,

                          一个service可以多个endpoint,  endpoint作用主要是 地址、契约、绑定

                          endpoint举个例子比如 绑定http 地址就是 http://192.168.1.1:80/service1 服务契约就是 IService

     (2) behaviors:

                         一个service可以有一个behavior ,约定服务的行为,比如服务出错是否输出详细错误,是否显示元数据等(元数据就是WCF浏览页)

     (3) bindinds:

                  一个service可以有一个bingding用于配置服务的传输协议和传输参数的设置等。

       

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="tcpBind"    portSharingEnabled="true" transferMode="Buffered"   >
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
        <services>
          <service behaviorConfiguration="MyServiceTypeBehaviors" name="WcfService.SayService">
            <endpoint binding="netTcpBinding" bindingConfiguration="tcpBind" contract="WcfService.ISayService" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceTypeBehaviors" >
              <!--发布元数据,发布前删除-->
              <serviceMetadata httpGetEnabled="true"  />
              <!--输出错误,发布前删除-->
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

      

    ===============================================================纯属个人理解=========================================================

  • 相关阅读:
    MicroPython实例之TurnipBit开发板自动浇水实验
    MicropPython的学习,如何从0到1?
    MicroPython最全资料免费获取
    MicroPython技术及应用前景
    如何将AD原理图直接转为Orcad原理图
    USB音频声卡的时钟同步方式----同步、异步、自适应
    字符串指针数组长度
    关于传统模拟电话按键时间
    小米笔记本13.3寸 八代i5独显 记录
    小米笔记本Air 13.3 熄屏 大概率无法唤醒问题(已解决)
  • 原文地址:https://www.cnblogs.com/sunkaixuan/p/4594033.html
Copyright © 2011-2022 走看看