c# - 什么是 WCF 中的已知类型

标签 c# 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。但是如果没有提供 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 这样的派生实例呢?类(class)?你会收到这样的东西:

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

[KnownType]属性通知 WCF 服务“可以”接收此 Admin类型,因为它是等待的子类 UserAccount类型。

Admin子类有更多的属性,比如 public string AdminEmail { get;set; } .此属性也将由客户端发送。 WCF 服务器在执行其服务器端解析作业时,会被告知此附加属性自 Admin 以来有效。类型是有效的 [KnownType] .

关于c# - 什么是 WCF 中的已知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915973/

相关文章:

c# - 表达式树在哪些情况下很有用?

c# - 连接两个字节 [] 返回 System.OutOfMemoryException

c# - 从 MVVM 属性调用异步方法

c# - 如何将其(参见下面的代码)转换为 C#?

负载均衡服务器中的WCF回调

c# - WCF 中的基础结构和应用程序端点之间有什么区别(通俗地说)?

c# - 业务对象是否应该具有行为?

c# - 选择ListView的特定列并在C#.net中的新消息框中打印

c# - 如何为自托管 WCF 服务启用跨域调用

wcf - 如何让 WCF 网站保持在线?