无法从<redact>获取元数据。客户端和服务绑定可能不匹配

时间:2017-05-01 10:05:39

标签: c# wcf datacontract known-types

WCF DataContract发生一些变化后,我突然无法再访问该服务了。使用Microsoft的WCF Test Client获取接口我收到以下错误消息

  

错误:无法获取元数据如果这是Windows(R)   请访问您的Communication Foundation服务   检查您是否已在指定的位置启用元数据发布   地址。有关启用元数据发布的帮助,请参阅   MSDN文档bla-bla。

     

元数据包含无法解析的引用:。   内容类型application / soap + xml; charset = utf-8不受支持   服务      

客户端和服务绑定可能不匹配。远程服务器   返回错误:(415)无法处理消息,因为   内容类型'application / soap + xml; charset = utf-8'不是   期望的类型'text / xml;字符集= UTF-8' 。

A question with the exact same error message was asked and answered here.

在该问题中,原因是配置文件中的错误。因为我的配置文件在昨天工作,所以我非常确定配置文件不是导致问题的原因。

[DataContract]
[KnownType(nameof(DerivedClass))]
public class BaseClass
{
    [DataMember]
    public int Id {get; set;}
    [DataMember]
    public string Name {get; set;}
}

[DataContract]
public class DerivedClass : BaseClass
{
     public decimal Value {get; set;}
}

我花了几个小时才找到问题的根源。我认为分享知识是明智的,以防有人使用与搜索字符串相同的错误消息。

测验:代码编译,服务运行,但无法获取元数据。你能在上面的代码中找到错误吗?

1 个答案:

答案 0 :(得分:0)

错误发生在KnownTypeAttribute。如果要将完整的派生类作为已知类型,则应使用带有Type参数的构造函数而不是string参数,因此:[KnownType( typeof (DerivedClass))]

[DataContract]
[KnownType(typeof(DerivedClass))]
public class BaseClass
{