使用NetDataContractSerializer在客户端抛出异常

时间:2009-10-14 11:08:38

标签: wcf

我尝试使用此帖子中的代码将WCF移动到NetDataContractSerializer: http://lunaverse.wordpress.com/2007/05/09/remoting-using-wcf-and-nhibernate

并在客户端添加此代码:

    foreach (OperationDescription desc in factory.Endpoint.Contract.Operations)
    {
        DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
        if (dcsOperationBehavior != null)
        {
            int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
            desc.Behaviors.Remove(dcsOperationBehavior);
            desc.Behaviors.Insert(idx, new NetDataContractOperationBehavior(desc));
            //return true;

        }               
    }

但是Eevry时间我把我的List电话叫了起来,我得到了这个例外:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:ListResult时出错。 InnerException消息是'反序列化器无法加载要反序列化的类型,因为类型'System.Collections.Generic.List`1 [[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version = 1.0.0.0,Culture = neutral ,'publicKeyToken = null]]'在程序集'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中找不到。检查被序列化的类型与被反序列化的类型具有相同的合同,并使用相同的程序集。有关详细信息,请参阅InnerException。

InnerExcption:

反序列化器无法加载要反序列化的类型,因为类型为'System.Collections.Generic.List`1 [[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version = 1.0.0.0,Culture = neutral,PublicKeyToken在程序集'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中找不到'null']'。检查被序列化的类型与被反序列化的类型具有相同的合同,并使用相同的程序集。

使用带有此标志的svcutils生成代理:/ct:System.Collections.Generic.List`1 所以另一边的列表不会变成数组。

deseriliezer查看的类型在服务器中定义。所有实体都是从这种类型派生的,但这不是驻留在客户端的代理的命名空间。

使用常规默认序列化器为WCF工作正常(还有其他问题涉及处理循环引用,导致我尝试不同的序列化器)。 任何想法?

谢谢, 达尼

1 个答案:

答案 0 :(得分:2)

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/433ba785-581c-4dfa-861a-f22574c1b463

本文称NetDataContract不支持svcutil生成的代理,您必须使用共享的dll。