簡體   English   中英

什么是WCF中的KnownType

[英]What is a KnownType in WCF

我正在學習wcf。 所以我遇到一個叫做已知類型的wcf屬性。 在這里,我得到了一段不清楚的代碼。

[DataContract]
   public class UserAccount {}

   [DataContract]
   public class Admin : UserAccount {}

   [DataContract]
   public class Guest : UserAccount {}

[DataContract]
  [ServiceKnownType(typeof(Admin))]
  [ServiceKnownType(typeof(Guest))]
  public class SecurityInfo
  {
          [DataMember]
          private UserAccount user;
  }

現在教程說上面的代碼可以正常工作,要么我們將SecurityInfo數據成員設置為Admin或Guest.But,如果沒有提供Admin和Guest的KnownTypeAttribute,反序列化引擎將無法識別Admin和Guest類型並將哭泣。

SecurityInfo和admin&guest類之間的關系是什么? 我真的不明白已知的類型屬性在這里做了什么。 我不熟悉已知的類型屬性,不知道它的作用以及何時使用它。

所以我想請求請讓我理解已知的類型屬性,結果我可以理解它的用途和它是什么....所以來一個簡單的示例代碼,我可以理解什么是已知的類型屬性。 謝謝

(這些是簡化的解釋,說明了概念,而不是WCF中的技術實現)。

當通過網絡發送消息時,例如使用WCF,它被序列化。 換句話說(大多數時候),在文本中。 說XML。 客戶端發送到服務器的XML描述了數據及其結構。

<data>
  <SecurityInfo>
    <user type="UserAccount">(some further XML data here)</user>
  </SecurityInfo>
</data>

收到此代碼后,WCF API會解析XML並嘗試創建您可以在代碼中操作的C#對象。 這是Securityinfo類的一個實例,其屬性類型為UserAccount 但是它如何知道哪個類可以實現?

顯然, <user>節點在其屬性中保存了類名。 但是如果客戶端發送了像Admin類這樣的衍生實例呢? 你會收到這樣的東西:

<data>
  <SecurityInfo>
    <user type="Admin">(some further XML data here)</user>
  </SecurityInfo>
</data>

[KnownType]屬性通知WCF服務“可以”接收此Admin類型,因為它是等待的UserAccount類型的子類。

Admin子類具有更多屬性時尤為重要,例如public string AdminEmail { get;set; } public string AdminEmail { get;set; } 此屬性也將由客戶端發送。 在進行服務器端解析作業時,WCF服務器會被告知此附加屬性有效,因為Admin類型是有效的[KnownType]

在WCF中使用已知類型來向數據協定序列化程序警告它將需要處理的類型,這對於服務契約的外部節點來說並不是顯而易見的。 例如,如果您有基本類型(在您的情況下是UserAccount),則序列化程序需要知道UserAccount可能具有的2個實際實際類型:Admin或Guest。 根據我的經驗,已知類型通常用於多態類型的集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM