我已经尝试使用本文中的代码将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;
}
}但是每次我调用我的列表调用时,我都会得到这样的异常:
格式化程序在尝试反序列化消息时引发异常:尝试反序列化参数http://tempuri.org/:ListResult时出错。反序列化程序无法加载要反序列化的类型,因为在程序集中找不到类型'System.Collections.Generic.List`1[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]。检查正在序列化的类型与正在反序列化的类型是否具有相同的协定,以及是否使用了相同的程序集。更多详情请查看InnerException。
InnerExcption:
反序列化程序无法加载要反序列化的类型,因为在程序集‘'System.Collections.Generic.List`1[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089’中找不到类型‘System.Collections.Generic.List`1[MYPROJ.Framework.Entities.EntityBase,MYPROJ.Framework.Entities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null。检查正在序列化的类型与正在反序列化的类型是否具有相同的协定,以及是否使用了相同的程序集。
代理是使用带有以下标志的svcutils生成的: /ct:System.Collections.Generic.List`1,因此另一端的列表不会转换为数组。
反序列器查找的类型是在服务器中定义的。所有实体都派生自此类型,但这不是驻留在客户端的代理的名称空间。
使用WCF的常规默认序列化程序工作得很好(还有其他涉及处理循环引用的问题,这导致我尝试使用不同的序列化程序)。有什么想法吗?
谢谢,丹妮
发布于 2009-10-16 14:43:33
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/433ba785-581c-4dfa-861a-f22574c1b463
这篇文章说NetDataContract不支持svcutil生成的代理,你必须使用共享dll。
https://stackoverflow.com/questions/1565632
复制相似问题