Использовать объект pre-serialises в качестве параметра метода WCF OperationContract
Я создаю приложение с общим состоянием, в котором приложение сервера WCF объединяет данные из разнородных источников в единую модель данных, которую затем синхронизирует с клиентами. Он предоставляет каждому клиенту начальный снимок модели, а затем отправляет дельты как каждое свойство модели в модели. В результате состояние распределяется между всеми клиентами.
Поскольку модель является изменчивой, каждая дельта должна быть глубокой копией свойства модели данных, которая может включать сложные объекты с вложенными свойствами. Как только свойство изменяется, копия создается и передается обработчику очереди клиента. Это должна быть копия - я не могу передать ссылку на свойство, так как оно может измениться в процессе сериализации. Блокировка модели при передаче дельты каждому клиенту нежелательна. Я хочу, чтобы основной поток приложения был освобожден, как только копия будет сделана.
Мой вопрос заключается в том, как наиболее эффективно совместить глубокое копирование с сериализацией проводов WCF. Быстрый и дешевый способ создания глубокой копии каждой дельты - использование класса DataContractSerializer. Поскольку это обычно используется в сериализации WCF, создается впечатление, что это может сэкономить время при сериализации дельты для передачи клиентам - возможно, есть способ сделать обе вещи за одну операцию. Поэтому я ищу способ приостановить сериализацию для конкретного метода OperationContract в интерфейсе дуплексного обратного вызова. По сути, я ищу способ сообщить привязке: "Не сериализуйте значение параметра для этого метода OperationContract - оно уже сериализовано с использованием DataContractSerializer - просто передайте его прямо клиенту. Поскольку я использую клиент Silverlight, я использую привязку PollingDuplexHttpBinding.