C# 使用“预序列化”对象作为WCF OperationContract方法参数

C# 使用“预序列化”对象作为WCF OperationContract方法参数,c#,wcf,silverlight,wcf-serialization,C#,Wcf,Silverlight,Wcf Serialization,我正在构建一个共享状态应用程序,其中WCF服务器应用程序将来自不同来源的数据聚合到单个数据模型中,然后与客户端同步。它为每个客户机提供模型的初始快照,然后将增量作为模型中的每个模型属性发送。因此,状态在所有客户端之间共享 因为模型是可变的,所以每个增量都需要是数据模型属性的深度副本,该属性可以包括具有嵌套属性的复杂对象。一旦属性发生更改,就会创建一个副本并将其传递给客户机队列处理程序。它必须是一个副本-我不能传递对属性的引用,因为它可能在序列化过程中发生更改。在将增量传递给每个客户机时锁定模型是

我正在构建一个共享状态应用程序,其中WCF服务器应用程序将来自不同来源的数据聚合到单个数据模型中,然后与客户端同步。它为每个客户机提供模型的初始快照,然后将增量作为模型中的每个模型属性发送。因此,状态在所有客户端之间共享

因为模型是可变的,所以每个增量都需要是数据模型属性的深度副本,该属性可以包括具有嵌套属性的复杂对象。一旦属性发生更改,就会创建一个副本并将其传递给客户机队列处理程序。它必须是一个副本-我不能传递对属性的引用,因为它可能在序列化过程中发生更改。在将增量传递给每个客户机时锁定模型是不可取的。我希望应用程序的主线程在复制完成后立即释放

我的问题是如何以最有效的方式将深度复制与WCF wire序列化结合起来。创建每个增量的深度副本的一种快速而廉价的方法是使用DataContractSerializer类。因为这通常用于WCF序列化,所以感觉这可以节省序列化增量以传输到客户端的时间-也许有一种方法可以在一个操作中同时完成这两件事情。因此,我正在寻找一种方法,在双工回调接口上暂停特定OperationContract方法的序列化。实际上,我正在寻找一种方法来告诉绑定“不要序列化此OperationContract方法的参数值-它已经使用DataContractSerializer序列化了-请直接将其传递给客户端”。因为我使用的是Silverlight客户端,所以我使用的绑定是PollingDuplexHttpBinding