[英]Using Structs with WCF Services
有沒有關於使用結構作為WCF服務的返回類型的官方建議?
我目前正在與一項我沒有寫過的服務進行互動,並發現自己受到啟發,要求查看我的煩惱是否合理。
我過去總是使用類 - 可能部分是因為這是樣本總是顯示的,但正如我現在想的那樣,出於其他“直觀”的原因:
我通過定義一個單獨的項目來開始合同樣式,該項目的接口表示服務來回傳遞的類型。
我使用LINQ很多,因此對於可空性的測試是隱含的引用類型,而對於結構和其他值類型,我總是需要標記為可空。
雖然我承認它比我腦子里的項目符號列表更直觀,但有些東西會馬上來找我。 我想問這個問題,因為我正在處理一個返回結構的服務,並且在處理返回值時必須寫:
var foo = Bar.Value.MyField;
代替
var foo = Bar.Value;
如果你可以創建一個結構並在其上放置一個[DataContract]
屬性 - 繼續使用它! 對於WCF,這沒有什么區別--WCF只要求使用標記有DataContract屬性的類或結構,並且要包含在序列化消息中的所有字段都要用[DataMember]
屬性標記。
如果您檢查DataContractAttribute上的MSDN文檔,它表明您也可以在結構上使用它:
[AttributeUsageAttribute(AttributeTargets.Class|
AttributeTargets.Struct|AttributeTargets.Enum,
Inherited = false, AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute
更新:至於何時使用結構而不是類(通常在.NET中),請在此處查看此SO問題:
但是,由於WCF實際上是關於消息傳遞(即您的客戶端進行方法調用,該調用及其參數將轉換為序列化消息,該消息通過線路發送,然后在另一端重新組裝並轉回方法我沒有看到使用struct
任何令人信服的理由。
一般.NET的所有好處並不真正適用於WCF的SOA世界,我會說(你不是在傳遞類或結構實例 - 見上文)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.