国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WCF回顧一、基本概念和應用場景

2019-11-17 02:11:12
字體:
來源:轉載
供稿:網友

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>

  

===============================================================純屬個人理解=========================================================


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钟山县| 大田县| 明水县| 拜泉县| 天镇县| 晋城| 剑川县| 余干县| 论坛| 平潭县| 安福县| 大洼县| 博客| 河间市| 吴堡县| 隆回县| 四平市| 靖边县| 蓬莱市| 岚皋县| 固安县| 江油市| 沾益县| 海城市| 商城县| 凭祥市| 察雅县| 蚌埠市| 滕州市| 永济市| 潞西市| 微山县| 布拖县| 康保县| 临江市| 潼关县| 芜湖市| 东台市| 革吉县| 武胜县| 郸城县|