【发布时间】:2017-04-21 20:40:47
【问题描述】:
我在尝试实现 MSDN 中的 ServiceKnownType 示例时遇到了问题。 在示例中,它们提供了以下类:
[DataContract()]
public class Widget
{
[DataMember]
public string Id;
[DataMember]
public string Catalog;
}
[DataContract()]
public class Machine : Widget
{
[DataMember]
public string Maker;
}
还有如下界面:
[ServiceKnownType(typeof(Widget))]
[ServiceKnownType(typeof(Machine))]
[ServiceContract()]
public interface ICatalog
{
[OperationContract]
Hashtable GetItems();
}
问题是在生成代理类时(使用“添加服务引用”/svcutil.exe),ICatalog代理接口中省略了“ServiceKnownType”属性,导致获取异常 “格式化程序在尝试反序列化消息时抛出异常:...... 将 'Widget' 对应的类型添加到已知类型列表中” 为了解决这个问题,我必须手动将服务已知属性添加到生成的代理接口,这是一个非常糟糕的解决方案,因为当我更新引用时代码会重新生成。 在所有这种情况下,有趣的是,如果 GetItems 操作将返回对象而不是 Hashtable,或者将对象作为参数,那么问题将得到解决,即
[OperationContract]
object GetItems();
或
[OperationContract]
Hashtable GetItems(object obj);
导致 Icatalog 代理接口上存在“ServiceKnownType”属性。 有谁知道如何解决这个问题?
谢谢
【问题讨论】:
标签: wcf svcutil.exe