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的已知类型列表

这个问题有解决办法吗?一定很普通吧?

ServiceKnownTypes列出在重新使用程序集时无法在WCF客户端上工作的列表

我在相关接口上方添加了这样一行

[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;
    }
}