2

我有一个 wcf 服务,它有 3 种方法,获取项目列表、添加项目和获取单个项目。

从基类继承的可能有 4 种类型。该服务使用每个派生类的 ServiceKnownType 进行修饰。

当我使用服务并且不选择重新使用程序集并引用 pocos 时,getlist 会按预期工作。当我重新使用程序集时,列表会引发序列化异常。

查看 wcf 客户端生成的 reference.cs 文件,我可以看到 KnownTypeAttribute 是在已生成的基类上创建的。在我重用基类的项目中,它用 ServiceKnownTypeAttribute 修饰方法。

因此,在调用 web 方法以返回列表时,我得到以下信息…… 反序列化器不知道映射到此名称的任何类型。考虑使用 DataContractResolver 或将与“TheChildObject”对应的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到传递给 DataContractSerializer 的已知类型列表中。

有解决这个问题的方法吗?应该很常见吧?

4

1 回答 1

1

我在相关接口上面加了这么一行

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

}
于 2013-07-15T11:15:02.250 回答