WCF中的資料契約和服務契約

2021-09-24 22:58:09 字數 1468 閱讀 4742

(1)服務契約定義了遠端訪問物件和可供呼叫的方法

servicecontract特性允許應用到介面或類上。當介面應用了servicecontract特性後,需要定義類實現該介面

然後使用乙個或多個類(或介面)方法中的 operationcontract 屬性定義協定的服務操作

通俗的說,給乙個類或者是介面打上servicecontract屬性標籤,表名了客戶端可以呼叫介面或類的內部打上了operationcontract

特性標籤的方法.

name 和 namespace 屬性控制 wsdl 元素中的協定名稱和命名空間。

例如:

[servicecontract]

inte***ce

imycontract

class

myservice

: imycontract

}

(2)資料契約:資料契約則是服務端和客戶端之間要傳送的自定義資料型別。

一旦宣告乙個型別為datacontract,那麼該型別就可以被序列化在服務端和客戶端之間傳送。

只有宣告為datacontract的型別的物件可以被傳送,且只有成員屬性會被傳遞,成員方法不會被傳遞。

wcf對宣告為datacontract的型別提供更加細節的控制,可以把乙個成員排除在序列化範圍以外,

也就是說,客戶端程式不會獲得被排除在外的成員的任何資訊

,包括定義和資料。預設情況下,所有的成員屬性都被排除在外,

因此需要把每乙個要傳送的成員宣告為datamember,如下所示。

[datacontract]

public

class

userinfo

[datamember]

public int age

[datamember]

public string location

public string zodiac

}

上面這段**把userinfo類宣告為datacontract,將username、age、location這3個屬性宣告為datamember(資料成員)。zodiac成員沒有被宣告為datamember,因此在交換資料時,不會傳輸zodiac的任何資訊

宣告為datamember的成員也可以自定義客戶端可見的名稱

除了name和namespace以外,datamember還有以下引數,它們的含義分別如下。

(1)isrequired:值為true時,要求序列化引擎檢查物件是否存在該值;若無,則會有異常丟擲。

(2)order:bool型別值,值為true時,序列化和反序列化過程將會按成員定義的順序進行,這對依賴於成員位置的反序列化過程無比重要。

(3)emitdefaultvalue:為成員屬性設定乙個預設值。

(4)jsonproperty: 此註解用於屬性上,作用是把該屬性的名稱序列化為另外乙個名稱,如把truename屬性序列化為name

wcf資料契約

專案中需要使用繼承關係,乙個函式返回特定的子類,在序列化的時候需要告訴序列化器,在父類檔案中使用kowntype注釋即可。namespace healthadminwebservice.logic datamember public string exercisestep datamember pu...

WCF服務契約 ServiceContract

服務契約servicecontract特性能夠把介面或者類公開為面向服務的契約,允許開發者使用c 語言進行程式設計把類似於介面這樣的語法結構公開為wcf契約和服務。指示介面或類在應用程式中定義服務協定。摘要 指示介面或類在 應用程式中定義服務協定。attributeusage attributeta...

WCF 第二章 契約 服務契約

服務契約描述了由服務終結點實現的介面操作。服務契約引用訊息格式並描述它們是怎麼被交換的。訊息格式更進一步被資料契約和訊息契約描述。這一部分主要涉及由服務契約實現的訊息交換。wcf在設計時和執行時使用服務契約。在設計階段,它們確定應該在wsdl理暴露為終結點的 的類。乙個使用 servicecontr...