【发布时间】: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