我正在构建一个共享状态应用程序,其中WCF服务器应用程序将来自不同源的数据聚合到单个数据模型中,然后它与客户端进行同步。它为每个客户端提供模型的初始快照,然后发送增量,作为模型中的每个模型属性。因此,所有客户都可以共享该状态。
由于模型是易变的,因此每个delta都需要是数据模型属性的深层副本,其中可以包含具有嵌套属性的复杂对象。属性更改后,将立即生成副本并将其传递给客户端队列处理程序。它必须是一个副本 - 我不能传递对属性的引用,因为它可能在序列化过程中发生变化。在将delta传递给每个客户端时锁定模型是不可取的。我希望在复制完成后立即释放应用程序的主线程。
我的问题是如何以最有效的方式将深拷贝与WCF线序列化相结合。创建每个delta的深层副本的快速而便宜的方法是使用 DataContractSerializer 类。因为这通常用于WCF序列化,所以感觉这样可以节省串行化delta以便传输到客户端的时间 - 也许有一种方法可以在一次操作中完成这两件事。所以我正在寻找一种方法来暂停双工回调接口上特定OperationContract方法的序列化。实际上我正在寻找一种方法来告诉绑定'不要序列化此OperationContract方法的参数值 - 它已经使用DataContractSerializer序列化 - 请直接将其传递给客户端。因为我使用的是Silverlight客户端,所以我使用的绑定是PollingDuplexHttpBinding。