我尝试使用此帖子中的代码将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工作正常(还有其他问题涉及处理循环引用,导致我尝试不同的序列化器)。 任何想法?
谢谢, 达尼
答案 0 :(得分:2)
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/433ba785-581c-4dfa-861a-f22574c1b463
本文称NetDataContract不支持svcutil生成的代理,您必须使用共享的dll。