Я пишу некоторое программное обеспечение, которое изменяет конфигурацию Windows Server (такие вещи, как MS-DNS, IIS, части файловой системы).Мой проект имеет серверный процесс, который строит граф объектов в памяти о состоянии конфигурации сервера, и клиент, который запрашивает этот граф объектов.Затем сервер будет сериализовать график, отправить его клиенту (предположительно с использованием WCF), затем сервер внесет изменения в этот график и отправит его обратно на сервер.Сервер получает график и продолжает вносить изменения в сервер.
Однако я узнал, что сериализация объектного графа в WCF не так проста, как я сначала подумал.Мои объекты имеют иерархию, и у многих есть параметризованные конструкторы и неизменные свойства / поля.Существует также множество коллекций, массивов и словарей.
Насколько я понимаю, сериализация WCF заключается в том, что она требует использования XmlSerializer или DataContractSerializer, но DCS накладывает ограничения на разработку моего объектного графа (кажется, что неизменные данныеправильно, это также требует конструкторов без параметров).Я понимаю, что XmlSerializer позволяет мне использовать мои собственные классы при условии, что они реализуют ISerializable и имеют конструктор десериализатора.Это нормально для меня.
Я говорил об этом с моим другом, и он выступает за использование маршрута только для объектов передачи данных, где мне придется поддерживать отдельный объект-граф DataContract длятранспортировка данных и повторная реализация объектов моего сервера на клиенте.
Другой мой друг сказал, что, поскольку моя служба имеет только две операции ("GetServerConfiguration" и "PutServerConfiguration"), возможно, стоит просто пропустить WCF полностьюи реализации моего собственного сервера, который использует сокеты.
Итак, мои вопросы:
- Кто-нибудь сталкивался с подобной проблемой раньше, и если да, есть ли лучшие подходы?Разумно ли отправлять целый граф объектов клиенту для обработки?Должен ли я вместо этого разбить его так, чтобы клиент запрашивал часть графа объекта так, как ему это нужно, и отправлял только биты, которые были изменены (таким образом уменьшая риски, связанные с параллелизмом?)?
- При отправке графа объектаэто правильный путь, является ли WCF правильным инструментом?
- И если WCF прав, каков наилучший способ заставить WCF сериализовать мой граф объектов?