ServiceKnownTypes列出在重新使用程序集时无法在WCF客户端上工作的列表
本文关键字:客户端 WCF 工作 列表 新使用 ServiceKnownTypes 程序集 | 更新日期: 2023-09-27 18:22:24
我有一个wcf服务,它有3个方法,获取项目列表、添加项目和获取单个项目。
有4种可能的类型是从基类继承的。对于每个派生类,服务都使用ServiceKnownType进行装饰。
当我使用服务并且不选择重用程序集和引用pocos时,getlist会按预期工作。当我重复使用程序集时,列表会抛出一个序列化异常。
查看wcf客户端生成的reference.cs文件,我可以看到KnownTypeAttribute是在生成的基类上创建的。在我重用基类的项目中,它使用ServiceKnownTypeAttribute来装饰方法。
因此,在调用web方法返回列表时,我得到以下内容。。。反序列化程序不知道映射到此名称的任何类型。请考虑使用DataContractResolver或将"TheChildObject"对应的类型添加到已知类型列表中,例如,使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表
这个问题有解决办法吗?一定很普通吧?
我在相关接口上方添加了这样一行
[ServiceKnownType("GetKnownTypes", typeof(KnownTypesHelper))]
以及的实现
public static class KnownTypesHelper
{
/// <summary>
/// Lists all WCF known types
/// </summary>
/// <param name="provider"></param>
/// <returns>A collection of all WCF known types</returns>
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
{
System.Collections.Generic.List<System.Type> knownTypes =
new System.Collections.Generic.List<System.Type>();
knownTypes.Add(typeof(WrntyCommon.WrntyDBEnums));
// Add any types to include here.
knownTypes.Add(typeof(AAA));
knownTypes.Add(typeof(BBB));
knownTypes.Add(typeof(CCC));
return knownTypes;
}
}