在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;}
}
我花了几个小时才找到问题的根源。我认为分享知识是明智的,以防有人使用与搜索字符串相同的错误消息。
测验:代码编译,服务运行,但无法获取元数据。你能在上面的代码中找到错误吗?
答案 0 :(得分:0)
错误发生在KnownTypeAttribute
。如果要将完整的派生类作为已知类型,则应使用带有Type参数的构造函数而不是string参数,因此:[KnownType( typeof (DerivedClass))]
[DataContract]
[KnownType(typeof(DerivedClass))]
public class BaseClass
{