WCF服務(wù)合同基本內(nèi)容概述
WCF是一款功能強(qiáng)大的開發(fā)工具,可以幫助開發(fā)人員打造一款跨平臺(tái)的互聯(lián)解決方案。在WCF中,所有的服務(wù)都暴露合同。合同是一種描述服務(wù)所實(shí)現(xiàn)功能的平臺(tái)中立的標(biāo)準(zhǔn)的方式。WCF定義了四種類型的合同:#t#
· 服務(wù)合同描述你可以在服務(wù)上執(zhí)行哪些操作。
· 數(shù)據(jù)合同定義哪些數(shù)據(jù)類型被傳入和傳出服務(wù)。WCF為內(nèi)置類型定義隱式合同,例如int和string,但是你可以容易地為定制類型定義顯式的選入式數(shù)據(jù)合同。
· 錯(cuò)誤合同定義哪些錯(cuò)誤將被該服務(wù)所激發(fā),以及該服務(wù)怎樣處理錯(cuò)誤信息和把如何把它們傳播到客戶端。
· 消息合同允許服務(wù)直接與消息進(jìn)行交互。消息合同可以被類型化或非類型化,并且有點(diǎn)類似于CLR中的遲綁定調(diào)用。不過,消息合同很少為SOA開發(fā)者所用。
在這4種類型的合同中,本文將集中討論服務(wù)合同。
你可以使用ServiceContractAttribute來定義一個(gè)服務(wù)合同,并且你可以把該屬性應(yīng)用于一個(gè)接口或一個(gè)類,如列表1(見本文相應(yīng)下載源碼)所示。
WCF服務(wù)合同獨(dú)立于接口或類可見性-公共或內(nèi)部可見性是一個(gè)CLR概念,而不是WCF概念。在一個(gè)內(nèi)部接口上應(yīng)用ServiceContractAttribute將把該接口暴露為一個(gè)公共服務(wù)合同(可以跨越服務(wù)邊界進(jìn)行消費(fèi))。沒有ServiceContractAttribute的話,該接口對(duì)WCF客戶端是不可見的,這與面向服務(wù)的宗旨一致(服務(wù)邊界是顯式的)。為了強(qiáng)制實(shí)現(xiàn)這一點(diǎn),所有的合同必須是嚴(yán)格選入的。
OperationContractAttribute僅能被應(yīng)用到方法(而不是屬性,索引器或事件,這都是一些CLR概念)中。OperationContractAttribute把一個(gè)合同方法暴露為在服務(wù)合同上執(zhí)行的一種邏輯操作。該接口上的其它不具有OperationContractAttribute屬性的方法不會(huì)成為合同的一部分。這可以強(qiáng)制實(shí)現(xiàn)顯式的服務(wù)邊界,并且,對(duì)于操作本身來說,保持一種選入模型。注意,合同操作獨(dú)立于方法可見性。列表1展示了通過定義一個(gè)合同接口把WCF服務(wù)合同與其實(shí)現(xiàn)分離開來的***應(yīng)用。
另外,你還可以直接把ServiceContractAttribute和OperationContractAttribute應(yīng)用于類,在這種情況下,WCF使用OperationContractAttribute從類中推斷出一個(gè)服務(wù)合同和方法。這是一種應(yīng)該盡量避免使用的技術(shù):
- //盡量避免使用
- [ServiceContract]
- class MyService
- {
- [OperationContract] //可見性并不要緊
- string MyMethod(string text)
- {
- return "Hello " + text;
- }
- public string MyOtherMethod(string text)
- {
- return "Cannot call this method over WCF";
- }
- }
這個(gè)ServiceContractAttribute把CLR接口(或推斷的接口)映射到一個(gè)技術(shù)中立的WCF合同上。通過派生和實(shí)現(xiàn)多個(gè)帶有ServiceContractAttribute的接口,單個(gè)類可以支持多個(gè)合同。類能夠通過隱式或顯式方式實(shí)現(xiàn)這個(gè)接口,因?yàn)樵摲椒梢娦詫?duì)WCF沒有任何影響。然而,存在許多實(shí)現(xiàn)約束:避免使用參數(shù)化的構(gòu)造器,因?yàn)閃CF僅使用默認(rèn)的構(gòu)造器。盡管該類能夠使用內(nèi)部屬性,索引器和靜態(tài)成員,但是沒有WCF客戶端能夠存取它們。
以上就是我們?yōu)榇蠹医榻B的有關(guān)WCF服務(wù)合同的相關(guān)內(nèi)容。