Silverlight WCF序列化数据协定(IsReference=true)问题
我有一个Silverlight 3用户界面,可以访问WCF服务,而WCF服务又可以访问使用NHibernate的职责。为了克服某些使用WCF的NHibernate延迟加载问题,我使用了我自己的DataContract代理,如下所述:。在这里,我设置preserveObjectReferences=true 我的模型包含周期(即具有IList[订单]的客户) 当我从我的服务中检索一个对象时,它工作正常,但是当我尝试将同一个对象发送回wcf服务时,我得到了错误: System.ServiceModel.CommunicationException 未由用户代码处理 Message=运行时出错 正在尝试序列化参数 . InnerException消息为“对象” graph…'包含循环且不能 如果引用不存在,则将被序列化 跟踪。考虑使用 带有 IsReference属性设置为true。' 因此,循环引用现在在Silverlight中是一个问题,因此我尝试将我的DataContract更改为[DataContract(IsReference=true)],但现在当我尝试从我的服务检索对象时,我得到以下异常: System.ExecutionEngineeException未经处理消息=的异常 键入“System.ExecutionEngineeException” 被扔了。内部异常:Silverlight WCF序列化数据协定(IsReference=true)问题,wcf,silverlight,serialization,datacontract,Wcf,Silverlight,Serialization,Datacontract,我有一个Silverlight 3用户界面,可以访问WCF服务,而WCF服务又可以访问使用NHibernate的职责。为了克服某些使用WCF的NHibernate延迟加载问题,我使用了我自己的DataContract代理,如下所述:。在这里,我设置preserveObjectReferences=true 我的模型包含周期(即具有IList[订单]的客户) 当我从我的服务中检索一个对象时,它工作正常,但是当我尝试将同一个对象发送回wcf服务时,我得到了错误: System.ServiceMode
有什么想法吗?您是否在客户端和服务器上都使用IsReference=true James Kovacs解决了这个问题,我将在这里发布链接: 这是更好的解决方案: 要启用操作或服务范围的循环引用,您可以使用自定义行为等。本质上,您需要能够挂接到序列化程序实例化过程中,并使用上述重载创建实例:
从中,您是否在客户端和服务器上都使用IsReference=true James Kovacs解决了这个问题,我将在这里发布链接: 这是更好的解决方案: 要启用操作或服务范围的循环引用,您可以使用自定义行为等。本质上,您需要能够挂接到序列化程序实例化过程中,并使用上述重载创建实例:
这是Silverlight 3和.Net 3.5中的WCF中的一个bug
我现在已经升级到.Net 4和Silverlight 4,所有东西(循环引用和从WCF返回的接口类型)都很好地结合在一起 这是Silverlight 3和.Net 3.5中的WCF中的一个bug
我现在已经升级到.Net 4和Silverlight 4,所有东西(循环引用和从WCF返回的接口类型)都很好地结合在一起 我的数据契约在客户机和服务器之间共享,因此yes IsReference=true在两者上都是。我已经在服务器端应用了自定义行为,并将preserveObjectReferences设置为true。但是在Silverlight3中,不可能设置preserveObjectReferences=true(没有构造函数重载&有一个私有setter)。它可能与.net 4.0中修复的此错误()有关,但由于依赖关系,我不确定是否可以升级到SL 4注意:从wcf服务获取对象时不会发生此错误,当从silverlight客户端通过服务将以前检索到的对象发送回时,会发生此错误。我的数据契约在客户端和服务器之间共享,因此yes IsReference=true在两者上都是。我已经在服务器端应用了自定义行为,并将preserveObjectReferences设置为true。但是在Silverlight3中,不可能设置preserveObjectReferences=true(没有构造函数重载&有一个私有setter)。它可能与.net 4.0中修复的此错误()有关,但由于依赖关系,我不确定是否可以升级到SL 4注意:从wcf服务获取对象时不会发生此错误,而是在从silverlight客户端通过服务发送以前检索到的对象时发生