【问题标题】:WCF: The server did not provide a meaningful reply;WCF:服务器没有提供有意义的回复;
【发布时间】:2019-08-22 07:42:16
【问题描述】:

我有一个相当简单的 WCF 服务,它来回发送传感器状态。

其中一个类型包含Type 类型的属性

public class SensorValue
{
    public string Name { get; set; }
    public string Value { get; set; }
    public Type ValueType { get; set; }
}

当我通过 WCF 检索传感器值列表时,我收到主题中提到的错误。

我不允许通过 WCF(反)序列化 Type 是否有明显的原因?

【问题讨论】:

  • TypeSystem.Type,对吧?
  • 对不起,确实

标签: c# wcf


【解决方案1】:

System.Type 是抽象的。假设您使用例如typeof(System.Int32) 设置该属性,您将获得一个具体的实现,很可能是System.RuntimeType。 (Un)幸运的是 that type is not public 所以 Datacontract 序列化程序根本无法得到它。它失败了:

SerializationException:不应使用数据协定名称为“RuntimeType:http://schemas.datacontract.org/2004/07/System”的类型“System.RuntimeType”。如果您使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。

尝试任何指导来解决您的问题是没有用的。将 ValueType 属性的类型替换为正常的东西(例如字符串)要容易得多,并提供足够的信息,以便客户端可以根据您在 ValueType 中提供的内容重新创建类型。

我使用Richard Petheram 中的this answer 中的代码来确认我怀疑根本原因是序列化程序的灾难性故障。

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多