日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

WinVista新技術(shù) WCF開發(fā)指南之構(gòu)建服務(wù)( 二 )


下面是一些可能的服務(wù)地址:

http://localhost:8001
http://localhost:8001/MyService
net.tcp://localhost:8002/MyService
net.pipe://localhost/MyPipe
net.msmq://localhost/private/MyService

四. 服務(wù)合同

在WCF中,所有的服務(wù)都暴露合同 。合同是一種描述服務(wù)所實現(xiàn)功能的平臺中立的標(biāo)準(zhǔn)的方式 。WCF定義了四種類型的合同:

· 服務(wù)合同描述你可以在服務(wù)上執(zhí)行哪些操作 。

· 數(shù)據(jù)合同定義哪些數(shù)據(jù)類型被傳入和傳出服務(wù) 。WCF為內(nèi)置類型定義隱式合同,例如int和string,但是你可以容易地為定制類型定義顯式的選入式數(shù)據(jù)合同 。

· 錯誤合同定義哪些錯誤將被該服務(wù)所激發(fā),以及該服務(wù)怎樣處理錯誤信息和把如何把它們傳播到客戶端 。

· 消息合同允許服務(wù)直接與消息進(jìn)行交互 。消息合同可以被類型化或非類型化,并且有點(diǎn)類似于CLR中的遲綁定調(diào)用 。不過,消息合同很少為SOA開發(fā)者所用 。

在這4種類型的合同中,本文將集中討論服務(wù)合同 。

你可以使用ServiceContractAttribute來定義一個服務(wù)合同,并且你可以把該屬性應(yīng)用于一個接口或一個類,如列表1(見本文相應(yīng)下載源碼)所示 。

服務(wù)合同獨(dú)立于接口或類可見性-公共或內(nèi)部可見性是一個CLR概念,而不是WCF概念 。在一個內(nèi)部接口上應(yīng)用ServiceContractAttribute將把該接口暴露為一個公共服務(wù)合同(可以跨越服務(wù)邊界進(jìn)行消費(fèi)) 。沒有ServiceContractAttribute的話,該接口對WCF客戶端是不可見的,這與面向服務(wù)的宗旨一致(服務(wù)邊界是顯式的) 。為了強(qiáng)制實現(xiàn)這一點(diǎn),所有的合同必須是嚴(yán)格選入的 。

OperationContractAttribute僅能被應(yīng)用到方法(而不是屬性,索引器或事件,這都是一些CLR概念)中 。OperationContractAttribute把一個合同方法暴露為在服務(wù)合同上執(zhí)行的一種邏輯操作 。該接口上的其它不具有OperationContractAttribute屬性的方法不會成為合同的一部分 。這可以強(qiáng)制實現(xiàn)顯式的服務(wù)邊界,并且,對于操作本身來說,保持一種選入模型 。注意,合同操作獨(dú)立于方法可見性 。列表1展示了通過定義一個合同接口把服務(wù)合同與其實現(xiàn)分離開來的最好應(yīng)用 。

另外,你還可以直接把ServiceContractAttribute和OperationContractAttribute應(yīng)用于類,在這種情況下,WCF使用OperationContractAttribute從類中推斷出一個服務(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";
 }
}
這個ServiceContractAttribute把CLR接口(或推斷的接口)映射到一個技術(shù)中立的WCF合同上 。通過派生和實現(xiàn)多個帶有ServiceContractAttribute的接口,單個類可以支持多個合同 。類能夠通過隱式或顯式方式實現(xiàn)這個接口,因為該方法可見性對WCF沒有任何影響 。然而,存在許多實現(xiàn)約束:避免使用參數(shù)化的構(gòu)造器,因為WCF僅使用默認(rèn)的構(gòu)造器 。盡管該類能夠使用內(nèi)部屬性,索引器和靜態(tài)成員,但是沒有WCF客戶端能夠存取它們 。

五. 宿主

每個WCF服務(wù)必須宿主在一個Windows進(jìn)程中(稱為宿主進(jìn)程) 。單個宿主進(jìn)程可以宿主多個服務(wù),而相同的服務(wù)類型可以宿主在多個進(jìn)程中 。WCF并不要求是否該宿主進(jìn)程也是客戶端進(jìn)程 。

顯然,應(yīng)該有一個獨(dú)立的進(jìn)程支持錯誤和安全的隔離 。另外,誰提供進(jìn)程或調(diào)用哪種類型的進(jìn)程都不是實質(zhì)性的問題 。這個宿主可以由IIS或Windows Vista中的Widows活動服務(wù)(WAS)或由開發(fā)者作為應(yīng)用程序的一部分來提供 。

推薦閱讀