WCF契約定義及主要用途
我們在使用WCF時,對其制定各種各樣的規則,就叫做WCF契約。任何一個分布式的應用程序在傳遞消息的時候都需要實現制定一個規則。#t#
任何一個分布式應用程序,它之所以能夠互相傳遞消息,都是事先制定好數據交換規則的,這個規則正是交換數據的雙方(比如服務器端和客戶端)能彼此理解對方的依據,WCF作為分布式開發技術的一種,同樣具有這樣一種特性。而在WCF中制定的的規則就被稱之為契約(Contract),它是WCF的消息標準,是任何一個wcf程序不可或缺的一部分。
契約有幾種?,他們都有什么用途
在WCF中,契約分為四種,它們分別為:
用于定義服務操作的服務WCF契約:Service Contract
這種級別的契約又包括兩種:ServiceContract和OperationContract
ServiceContract用于類或者結構上,用于指示WCF此類或者結構能夠被遠程調用,而OperationContract用于類中的方法(Method)上,用于指示WCF該方法可被遠程調用。
用于自定義數據結構的數據WCF契約:Data Contract
數據契約也分為兩種:DataContract和DataMember.DataContract用于類或者結構上,指示 WCF此類或者結構能夠被序列化并傳輸,而DataMember只能用在類或者結構的屬性(Property)或者字段(Field)上,指示WCF該屬性或者字段能夠被序列化傳輸。
用于自定錯誤異常的異常WCF契約:Fault Contract
FaultContract用于自定義錯誤異常的處理方式,默認情況下,當服務端拋出異常的時候,客戶端能接收到異常信息的描述,但這些描述往往格式統一,有時比較難以從中獲取有用的信息,此時,我們可以自定義異常消息的格式,將我們關心的消息放到錯誤消息中傳遞給客戶端,此時需要在方法上添加自定義一個錯誤消息的類,然后在要處理異常的函數上加上FaultContract,并將異常信息指示返回為自定義格式。
用于控制消息格式的消息WCF契約:Message Contract
簡單的說,它能自定義消息格式,包括消息頭,消息體,還能指示是否對消息內容進行加密和簽名。
如何定義WCF契約?
其實上面落里羅嗦說了一大堆,似乎契約使用起來應該很難的樣子了,可事實上,契約的使用是很簡單的,它無非就是在普通的程序結構上添加一些聲明性的屬性就可以了,比如我們可以直接在類上聲明ServerContractAttribute,此時這個類就能被遠程客戶端訪問到,而在類中的方法中(Method)添加OperationContractAttribute就能將方法暴露給遠程客戶端,其他的契約也一樣的用法,比較難得還是消息契約和錯誤契約,當也很簡單。