gpt4 book ai didi

c# - 重新使用程序集时,ServiceKnownTypes 列表在 WCF 客户端上不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:23 25 4
gpt4 key购买 nike

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

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

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

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

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

是否有解决此问题的方法?一定很常见吧?

最佳答案

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

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

}

关于c# - 重新使用程序集时,ServiceKnownTypes 列表在 WCF 客户端上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com