zoukankan      html  css  js  c++  java
  • WCF笔记

    -》WCF
     WCF合并了ASP.NET Web 服务、.NET Remoting、消息队列和Enterprise Servives的功能
     WCF本质提供一个跨进程、跨机器以及跨网络的服务调用
     WCF不能孤立存在,需要寄宿于一个运行着的进程中—宿主
     WCF的典型宿主包括一下四种:
      1."Self-Hosting" in a Managed Application(自托管宿主)
      2.Managed Windows Services(Windows Services宿主)
      3.Internet Information Service(IIS宿主)
      4.Windows Process Activation Service(WAS宿主)
     
     internal(访问修饰符):只有在同一个程序集的文件中,内部类型或成员才是可访问的,接口Interface不加修饰符默认是internal,内部成员为public
     
     WCF应用程序和WCF类库区别:
      类库只是类的集合,不能单独运行。
      WCF服务程序项目是可以直接托管执行的,svc文件属于WCF服务的特定文件扩展名,IIS里有对应的处理程序。
      WCF服务程序可以直接IIS里托管即可,WCF类库需要一个程序来引用并托管它
      
     
     WCF包含四中类型的契约:服务契约、数据契约、消息契约和错误契约
        创建WCF项目需要引用System.ServiceModel
     
       WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint),
       的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成即为:Endpoint=ABC
      
       SOA:面向服务构架,一种粗粒度、松耦合服务构架,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S
        模型、XML/Web Service技术之后的自然延伸
     
       WCF配置文件分为服务端配置与客户端配置。
     1.服务端配置:
     <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
       <system.serviceModel>
        <behaviors>
         <serviceBehaviors>
          <behavior name="metadataBehavior">
           <serviceMetadata httpGetEnabled="true" httpGetUrI="http://127.0.0.1:9999/calculatorservice/metadata" />
          </behavior>
         </serviceBehaviors>
        </behaviors>
        <services>
         <service behaviorConfiguration="metadataBehavior" name="Services.CalculatorService">
          <endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding" contract="Contracts.ICalculator" />
         </service>
        </services>
       </system.serviceModel>
      </configuration>
      1.1<services>配置节点
       <service>配置了一个服务,可以有多个<service>也就是可以有多个服务
       name属性配置了实现Service Contract的类型名
       behaviorConfiguration属性配置了与<behaviors>节点的内容有关
       <endpoint>配置节是<service>配置节的主体,包含三部分:address  、binding和contract
        binding配置是在<bindings>配置节中完成,因而在<endpoint>中配置bindingConfiguration属性,指向具体的binding配置
       例如:
       <services>
        <service name="BruceZhang.MyService" behaviorConfiguration="MyBehavior">
         <endpoint address="" binding="netTcpBinding" contractConfiguration="DuplexBinding" contract="BruceZhang.IHello" />
        </service>
       </services>
       
       定义多个endpoint,例如:
       <services>
        <service name="Microsoft.ServiceModel.Sqmples.CalulatorService" behaviorConfiguration="CalculatorServiceBehavior">
         <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" />
         <endpoint address="mex" binding="mexHttpBinding"  contract="Microsoft.ServiceModel.Samples.IMetadataExchange" />
        </service>
       </services>
        如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/services.svc
        而IMetaExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。这里所谓的基地址可以在<service>中通过配置<host>类定义:
        <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
         <host>
          <baseAddress>
           <add baseAddress="http://localhost/ServiceModelSamples/service.svc" />
          </baseAddress>
         </host>
        </service>
      1.2<behaviors>配置节
       服务端定义一个Service Contract,binding和address信息是客户端必须知道的,否则无法调用该服务。
       behavior设置服务的运行时属性
       通过自定义behavior插入一些自定义类型
       例如:通过指定ServiceMetadataBehavior,可以使WCF服务对外公布Metadata,配置如下:
        <behaviors>
         <serviceBehaviors>
          <behavior>
           <serviceMetadata httpGetEnabled="true" httpGetUrI="" />
          </behavior>
         </serviceBehaviors>
        </behaviors>
       在WCF中,behavior被定义为Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute
       是最常用的behavior。
       利用ServiceBehavior与OperationBehavior可以控制服务的如下属性:
       1.对象实例的生命周期
       2.并发与异步处理
       3.配置行为
       4.事务行为
       5.序列化行为
       6.元数据转换
       7.会话的生命周期
       8.地址过滤以及消息头的处理
       9.模拟(Impersonation)
       例如,通过ServcieBehavior设置对象实例的生命周期:
       <behaviors>
        <serviceBehaviors>
         <behavior>
          <instanceContectMode httpGetEnabled="true" httpGetUrI="" />
         </behavior>
        </serviceBehaviors>
       </behaviors>
       
     WCF常用binding方式:
      BasicHttpBinding:用于把WCF服务当做ASMX  Web 服务。用于兼容旧的Web ASMX服务。
      WSHttpBinding:比BasicHttpBinding更加安全,通常用于non-duplex服务通讯。
      WSDualHttpBinding:和WSHttpBinding相比,它支持duplex类型的服务
      WSFederationHttpBinding:WS-Federation安全通讯协议
      NetTcpBinding:使用TCP协议,用于在局域网内跨机器通信,有几个特点:可靠性、事务支持和安全,优化了WCF到WCF的通信。限制是服务端和客户端都必须使用WCF来实现
      NetNamedPipeBinding:使用命名管道进行安全、可靠、高效的单机服务通讯方式
      NetMsmqBinding:使用消息队列在不同机器见进行非连接通讯
      NetPeerTcpBinding:使用P2P协议在多机器间通讯
      MsmqIntegrationBinding:将WCF消息转化为MSMQ消息,使用现有的消息队列系统进行跨机器通讯。如:MSMQ
     
     通过IIS寄宿
      基本包含两个步骤:为WCF服务创建.svc文件和创建IIS虚拟目录
      1.为WCF服务创建.svc文件
       一个asp.net web 服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对应Web 服务的调用。
       一个WCF服务也具有一个对应的文本文件,扩展名为.svc,基于IIS的服务的寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上
       .svc文件仅仅包含一个ServiceHost指令(Directive),该指令具有一个必须的Service属性和一些可选的属性。
       svc仅仅具有一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的ServiceHost指令。例如例子中的CalculatorService对应的.svc,如下所示
       把该.svc放在Services项目的根目录下,并将文件命名为CalculatorService.svc
       <%@ServiceHost Service="Services.CalculatorService" %>
      2.为WCF服务创建虚拟目录
       可以直接把Services项目的根目录映射为IIS虚拟目录,并把该虚拟目录的命名为WcfServices
       然后需要为通过IIS寄宿的CalculatorService创建配置文件,只需要在Services的根目录下创建一个Web.config,将WCF相应的配置文件添加到该配置文件即可。
       配置文件和自我寄宿配置一致,唯一不同的是在添加的终结点中无须指定地址,因为.svc所在的地址就是服务的地址。,也就是http://127.0.0.1:9999
       
    ->WCF 如何通过Remoting实现双向通信
     Remoting是NET平台下比较成熟的高效分布式技术。
        传统做法:远程调用的方式使用Remoting。在客户端所在的Application Domain,我们通过Proxy(Transparent Proxy)远程的跨Application Domain调用一个方法。
         当来自Client端的调用请求通过Proxy到达Server端所在的Application Domain后,Remoting Infrastructure在Server端激活(Activate)相应的远程对象(一个
         继承子System.MarvshalByRefobject类对象)——这里仅仅以服务端激活对象(Server Activated Object——SAO),然后再Server端执行相应的操作后把Result传递给Proxy,
         并最终到达Client。这是一种Request/Response的调用方式。
     .net平台下的Remoting是一种较web service更为成熟的分布式技术,提供了双向通信支持等web service不具备的功能
     双向通信实质上是采用的Duplex的MEX。也就是说,Server端在执行操作的时候,可以回调(Callback)Client端的操作(这个操作时在Client端的Application
     Domain中执行)
     
    ->在WCF中实现双工通信
     双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息。基于双工MEP消息交换可以看作是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合。

  • 相关阅读:
    stl_heap
    关于随机数 C++
    关于if语句的细节
    C++关于智能指针
    sqlyog
    win10 64位 汇编环境
    Qt 乱码
    Vux使用经验
    Flex布局新旧混合写法详解
    【原】npm 常用命令详解
  • 原文地址:https://www.cnblogs.com/dongbo19910728/p/4305672.html
Copyright © 2011-2022 走看看