C# ServiceKnownTypes列表在重新使用程序集时不在WCF客户端上工作
我有一个wcf服务,它有3种方法:获取项目列表、添加项目和获取单个项目 有4种可能的类型是从基类继承的。 对于每个派生类,服务都用ServiceKnownType修饰 当我使用服务并且不选择重用程序集和引用POCO时,getlist会按预期工作。当我重新使用程序集时,列表会引发序列化异常 查看wcf客户端生成的reference.cs文件,我可以看到KnownTypeAttribute是在已生成的基类上创建的。在我重用基类的项目中,它用ServiceKnownTypeAttribute来修饰方法 因此,在调用web方法返回列表时,我得到以下结果。。。 反序列化程序不知道映射到此名称的任何类型。考虑使用DATACONTRORTCORDEVER或将对应于“CythObjor”的类型添加到已知类型的列表中,例如,使用NoNyType属性或将其添加到已知的类型传递到DATACONTROTTRORIGALASER的列表中。C# ServiceKnownTypes列表在重新使用程序集时不在WCF客户端上工作,c#,asp.net-mvc,wcf,C#,Asp.net Mvc,Wcf,我有一个wcf服务,它有3种方法:获取项目列表、添加项目和获取单个项目 有4种可能的类型是从基类继承的。 对于每个派生类,服务都用ServiceKnownType修饰 当我使用服务并且不选择重用程序集和引用POCO时,getlist会按预期工作。当我重新使用程序集时,列表会引发序列化异常 查看wcf客户端生成的reference.cs文件,我可以看到KnownTypeAttribute是在已生成的基类上创建的。在我重用基类的项目中,它用ServiceKnownTypeAttribute来修饰方法
这个问题有解决办法吗?一定很普遍吧 我在相关接口上方添加了这样一行
[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;
}
}
公共静态类KnownTypeHelper
{
///
///列出所有已知的WCF类型
///
///
///所有WCF已知类型的集合
公共静态IEnumerable GetKnownTypes(ICustomAttributeProvider提供程序)
{
System.Collections.Generic.List knownTypes=
新建System.Collections.Generic.List();
Add(typeof(wrntycomon.wrntydbenms));
//在此处添加要包括的任何类型。
添加(类型(AAA));
添加(类型(BBB));
添加(类型(CCC));
返回knownTypes;
}
}
只需将knowtypes属性添加到基类中即可。现在,我在服务契约接口上有serviceknowtype,在基类上有knowntype,这两种情况下都可以使用