在 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;
}
}
有人知道如何将泛型类型定义传递给我的客户吗?或者甚至可能吗?
你的方法从根本上被打破了。
您不能发送类型 - 您需要发送它所在的程序集(这是一个字节数组)。类型采用内存表示形式 - 它们可能依赖于其他类型。
现在,如果你在另一端有程序集 - 不要发送类型(就像你一样),而是发送完整的类型名称,然后你可以实例化它。但是如果我没看错并且这是一个插件设置,那么我认为您有一个问题,即您实际上在接收端没有该类型 - 然后事情真的变得有点复杂。
这是因为默认序列化使用 DataContractSerializer
.尝试切换客户端和服务器以使用嵌入 .NET 类型信息的 NetDataContractSerializer。在这种情况下,你的服务将与标准 Web 服务不兼容,但只要你确定两端都是用 .NET 编写的,你就会没问题。