【问题标题】:using NetDataContractSerializer throws an exception on client side使用 NetDataContractSerializer 在客户端引发异常
【发布时间】:2009-10-14 11:08:37
【问题描述】:

我尝试使用本文中的代码将 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;

        }               
    }

但是每次我调用我的 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:

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

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

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

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

谢谢, 丹妮

【问题讨论】:

  • 令我困惑的是为什么它在 mscorlib 程序集中而不是在我的一个程序集中寻找我的类型?我认为这是导致问题的原因......
  • 好的...我找到了一篇 MSFT 文章,说您不能将此序列化程序与 svcutils 一起使用,只能与共享 dll 一起使用!!!

标签: wcf


【解决方案1】:

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

这篇文章说 NetDataContract 不支持 svcutil 生成的代理,必须使用共享 dll。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多