Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceKnownTypes列表在重新使用程序集时不在WCF客户端上工作_C#_Asp.net Mvc_Wcf - Fatal编程技术网

C# ServiceKnownTypes列表在重新使用程序集时不在WCF客户端上工作

C# ServiceKnownTypes列表在重新使用程序集时不在WCF客户端上工作,c#,asp.net-mvc,wcf,C#,Asp.net Mvc,Wcf,我有一个wcf服务,它有3种方法:获取项目列表、添加项目和获取单个项目 有4种可能的类型是从基类继承的。 对于每个派生类,服务都用ServiceKnownType修饰 当我使用服务并且不选择重用程序集和引用POCO时,getlist会按预期工作。当我重新使用程序集时,列表会引发序列化异常 查看wcf客户端生成的reference.cs文件,我可以看到KnownTypeAttribute是在已生成的基类上创建的。在我重用基类的项目中,它用ServiceKnownTypeAttribute来修饰方法

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

有4种可能的类型是从基类继承的。 对于每个派生类,服务都用ServiceKnownType修饰

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

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

因此,在调用web方法返回列表时,我得到以下结果。。。 反序列化程序不知道映射到此名称的任何类型。考虑使用DATACONTRORTCORDEVER或将对应于“CythObjor”的类型添加到已知类型的列表中,例如,使用NoNyType属性或将其添加到已知的类型传递到DATACONTROTTRORIGALASER的列表中。


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

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

[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,这两种情况下都可以使用