Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight WCF序列化数据协定(IsReference=true)问题_Wcf_Silverlight_Serialization_Datacontract - Fatal编程技术网

Silverlight WCF序列化数据协定(IsReference=true)问题

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

我有一个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” 被扔了。内部异常:


有什么想法吗?

您是否在客户端和服务器上都使用IsReference=true

James Kovacs解决了这个问题,我将在这里发布链接:

这是更好的解决方案:

要启用操作或服务范围的循环引用,您可以使用自定义行为等。本质上,您需要能够挂接到序列化程序实例化过程中,并使用上述重载创建实例:

  • 子类DataContractSerializePropertyBehavior

  • Ovverride CreateSerializer方法

  • 创建一个新的DCS实例,将true传递给preserveObjectReferences参数


  • 中,您是否在客户端和服务器上都使用IsReference=true

    James Kovacs解决了这个问题,我将在这里发布链接:

    这是更好的解决方案:

    要启用操作或服务范围的循环引用,您可以使用自定义行为等。本质上,您需要能够挂接到序列化程序实例化过程中,并使用上述重载创建实例:

  • 子类DataContractSerializePropertyBehavior

  • Ovverride CreateSerializer方法

  • 创建一个新的DCS实例,将true传递给preserveObjectReferences参数


  • 这是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客户端通过服务发送以前检索到的对象时发生