在 WCF 数据协定中使用 System.Type

本文关键字:System Type WCF 数据 | 更新日期: 2023-09-27 18:37:11

我正在构建一个分布式(客户端-服务器都是.NET)。使用WCF的 NET 应用程序。正如你在下面的代码中看到的,我想在我的一个DataContracs中使用System.Type来发送参数类型。但是,当我这样做时,我总是得到一个例外。所有其他东西都在工作,这意味着当我删除 System.Type 属性时,它运行良好。

[DataContract]
  public class PluginParametersItemDto
  {
     [DataMember]
     public String Name { get; set; }
     [DataMember]
     public Type Type { get; set; }
     [DataMember]
     public Object Value { get; set; }
     public PluginParametersItemDto(String name, Type type, Object value)
     {
        this.Name = name;
        this.Type = type;
        this.Value = value;
     }
  }

有人知道如何将泛型类型定义传递给我的客户吗?或者甚至可能吗?

在 WCF 数据协定中使用 System.Type

你的方法从根本上被打破了。

您不能发送类型 - 您需要发送它所在的程序集(这是一个字节数组)。类型采用内存表示形式 - 它们可能依赖于其他类型。

现在,如果你在另一端有程序集 - 不要发送类型(就像你一样),而是发送完整的类型名称,然后你可以实例化它。但是如果我没看错并且这是一个插件设置,那么我认为您有一个问题,即您实际上在接收端没有该类型 - 然后事情真的变得有点复杂。

这是因为默认序列化使用 DataContractSerializer .尝试切换客户端和服务器以使用嵌入 .NET 类型信息的 NetDataContractSerializer。在这种情况下,你的服务将与标准 Web 服务不兼容,但只要你确定两端都是用 .NET 编写的,你就会没问题。