久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[WCF 學(xué)習(xí)筆記] 2. 服務(wù)契約

 louisasea 2007-08-10

 

契約(Contract)是 WCF 的消息標(biāo)準(zhǔn),告知客戶端如何與服務(wù)器聯(lián)系交互,。契約是平臺中立的,,也就說我們可以使用其它平臺(包括開發(fā)和系統(tǒng)平臺)來調(diào)用服務(wù)。WCF 中包含 4 種契約,,分別是用于定義服務(wù)操作(Operations)的 Service Contract,,定義自定義數(shù)據(jù)結(jié)構(gòu)的 Data Contract,定義錯誤異常的 Fault Contract,,以及直接控制消息格式的 Message Contract,。本文只是簡要說明一下 Service Contract 和 Data Contract,,其他幾種的使用方式將在后面的章節(jié)中進行。

一般情況下,,我們用接口(Interface)來定義服務(wù)契約(Service Contract),。雖然我們也可以使用 Class,但使用接口的好處更明顯一些,。
  • 便于契約的繼承,,不同根的類型可以自由實現(xiàn)相同的契約。
  • 同一服務(wù)類型可以實現(xiàn)多個契約,。
  • 和接口隔離原則相同,,我們隨時可以修改服務(wù)類型。
  • 便于制定版本升級策略,,讓新老版本的服務(wù)契約同時使用,。
WCF 使用特性 ServiceContractAttribute 標(biāo)定服務(wù)契約,OperationContractAttribute 標(biāo)定服務(wù)方法,。
[ServiceContract]
public interface ICalculate
{
  [OperationContract]
  double Add(double a, double b);
}

OperationContract 只能用于 Method,,只有添加了此特性的方法才能被客戶端調(diào)用。它甚至可以用來標(biāo)注私有方法,,這顯然超出了面向?qū)ο蟮囊?guī)則,,而更多的是 SOA 的方式。SOA 只是分布式系統(tǒng)的架構(gòu)體系,,在架構(gòu)體系內(nèi)部我們依然采取面向?qū)ο蟮脑瓌t來編碼,,所以標(biāo)注私有方法是不被推薦的,這也是使用接口作為服務(wù)契約的一個好處(接口中無法定義私有方法),。

我們還可以使用 DataContractAttribute,、DataMemberAttribute 來標(biāo)注自定義數(shù)據(jù)類型,這樣我們就可以在服務(wù)方法中傳遞復(fù)雜的數(shù)據(jù)體了,。使用之前,,我們需要添加 System.Runtime.Serialization.dll 引用。由此我們可以看出其基本的開發(fā)模式,,那就是使用 ServiceContract,、OperationContract 執(zhí)行運算,而使用 DataContract,、DataMember 作為可序列化的數(shù)據(jù)載體,。當(dāng)然,我們也可以使用 "[Serializable]" 代替 "[DataContract]",。
[DataContract]
public struct Number
{
  [DataMember]
  public double Num1;

  [DataMember]
  public double Num2;

  public Number(double num1, double num2)
  {
    this.Num1 = num1;
    this.Num2 = num2;
  }
}

[ServiceContract]
public interface ICalculate
{
  [OperationContract]
  double Add(Number number);
}

以下是相關(guān)特性參數(shù)的簡單說明,,在后面的章節(jié)中在詳細(xì)探討其使用方法。

ServiceContract
  • ConfigurationName: 其設(shè)置信息在配置文件中的名稱。
  • Name / Namespace:自定義該服務(wù)契約的名稱和命名空間,。建議設(shè)置服務(wù)契約的 Name 和 Namespace,,這樣生成的客戶端的代理文件會使用自定義名稱來命名相關(guān)代理類型,即便我們?nèi)蘸髮Ψ?wù)器端的契約名稱進行重構(gòu)也不會影響到客戶端,。
  • SessionMode:設(shè)置服務(wù)契約的 Session 方式,,包括 Allowe、NotAllowed,、Required,。SessionMode 需要相應(yīng)的 Binding 支持,默認(rèn)情況下會自動啟用,,另外我們還會和 ServiceBehaviorAttribute.InstanceContextMode 配合使用來管理服務(wù)對象的生命周期。
  • CallbackContract:設(shè)置 duplex 模式時的回調(diào)類型,。
  • ProtectionLevel:指定消息保護方式,,可以對消息進行加密和簽名處理。
OperationContract
  • AsyncPattern:用于定義異步服務(wù)方法,。
  • IsInitiating:指示服務(wù)方法能否啟動一個 Session,。
  • IsTerminating:指示服務(wù)方法調(diào)用完成是否結(jié)束 Session。
DataContract
  • Name / Namespace:自定義名稱和命名空間,。
DataMember
  • Name:自定義名稱,。
  • IsRequired:指示該成員序列化前必須被賦值。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多