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消息交換能夠看做是多個基本模式下(好比請求-回覆模式和單項模式)消息交換的組合。web

相關文章
相關標籤/搜索