我正在編寫WCF服務和他的客戶端。我想在服務和客戶端之間發送/接收自定義類的對象。是WCF所需的DataContract屬性
我有3個模塊
- WCF服務
- WCF客戶端
- 共同類庫
兩個WCF服務和客戶端具有共同的類庫引用。 我不想用DataContract屬性標記所有的類。
所以,我的問題是「DataContract屬性是否需要WCF?」
我使用.NET 4和netTcpBinding。
我正在編寫WCF服務和他的客戶端。我想在服務和客戶端之間發送/接收自定義類的對象。是WCF所需的DataContract屬性
我有3個模塊
兩個WCF服務和客戶端具有共同的類庫引用。 我不想用DataContract屬性標記所有的類。
所以,我的問題是「DataContract屬性是否需要WCF?」
我使用.NET 4和netTcpBinding。
如果我正確地記得(IIRC),如果你不使用正式的數據契約標記,它默認採用字段串行器的方式。這會起作用,但不易版本化,因爲私人更改可能會破壞客戶端/服務器。國際海事組織你應該總是正式裝飾WCF類型的數據合同/數據成員屬性。它會在沒有它們的情況下工作,但是出於錯誤的原因(IIRC,原來它沒有沒有正式標記)。
你可以在WCF中使用幾個serializaton技術,它是關於它的很好的適應性的東西之一。看一看:
它使用DataContract屬性不是必需的,您的服務將工作得很好,沒有他們。
話雖如此,我真的不認爲你的服務和客戶共享一個類庫是最好的設計方法。如果您通過DataContracts公開您的類型,這將更清晰。
有一天,有人想要使用服務但無法訪問共享類庫時會發生什麼?
只有我的客戶將使用該服務。 – user179437 2011-05-07 14:45:29
當服務有一個方法([OperationContract]),它有我的自定義類的參數,並且該類沒有默認構造函數時,我收到來自WCF服務主機的InvalidDataContractException。 – user179437 2011-05-07 14:47:42
即使您的服務和客戶端共享一個類庫,WCF也會嘗試序列化您的類型,並且需要一個默認構造函數。您的設計違反了Web服務設計的原則,我認爲您最好使用.NET遠程處理等其他方法。 – 2011-05-07 14:58:54
「是DataContract屬性需要 爲WCF」
從技術上講,沒有。這取決於您是否使用DataContractSerializer(這是許多綁定的默認值)。
還有其他的選擇:
縮回ContractDescription建議。我懷疑你可以使用ContractDescription以某種方式更改序列化程序 – Schneider 2011-05-09 01:34:14
我真的認爲IIRC是一些技術術語。發現它意味着'如果我沒有記錯'。大聲笑! – thewpfguy 2013-02-06 04:08:50
好吧,多年來我一直認爲它代表「如果我ReCall」,我想它更有意義的是,R和C代表不同的單詞。 – 2014-02-12 05:17:51
http://msdn.microsoft.com/zh-cn/library/ms733127%28v=vs.110%29.aspx表示默認情況下,只有公共讀/寫屬性和字段包含在合同中。 – 2014-08-15 21:31:18