契約(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,但使用接口的好處更明顯一些,。
[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
|
|