.NET Remoting, управление версиями и интерфейсы - PullRequest
0 голосов
/ 17 февраля 2009

У меня большой проект удаленного взаимодействия .NET с использованием фреймворка 2.0. API сервера предоставляется через интерфейсы, а общие типы содержатся в сборке, используемой совместно с клиентским приложением.

У меня есть несколько методов, которые принимают массивы базового класса, у которого есть много разных классов, наследующих его.

Например, у меня есть базовый класс «Транспортное средство», у которого есть два класса, которые наследуются от него: «Автомобиль» и «Грузовик».

У меня есть метод IFoo.Save (Список транспортных средств)

Позже я добавляю новый класс, который наследуется от «Vehicle» с именем «Motorcycle», и только общий сервер или клиент имеют новую общую сборку, но не оба. Один из них не сможет разрешить новый тип.

Какой, на ваш взгляд, самый гибкий способ справиться с этой ситуацией?

РЕДАКТИРОВАТЬ: Это клиентское приложение Windows Forms и сервер удаленного взаимодействия, размещенный в службе Windows.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2009

Опубликовать обновление. Для таких вещей у вас всегда должно быть все в одной версии. Возможно, рассмотрите ClickOnce, чтобы держать всех в курсе.

2 голосов
/ 17 февраля 2009

ClickOnce - хорошее решение.

Или используйте подход, не зависящий от класса, от Web-сервисов. Передача версионных, двоичных потоков словарей, которые могут быть восстановлены как объекты. Если это важно, напишите свой материал восстановления объекта для обработки и прямой и обратной совместимости, в противном случае просто отклоните данные с «будущим» номером версии.

Веб-сервисы отлично подходят для развязки. Словари отлично подходят для передачи общих данных. Управление версиями на основе ассемблера ужасно (даже с изменениями сериализации в последних версиях .Net) и приводит к безумию ...

1 голос
/ 17 февраля 2009

Это похоже на вопрос развертывания. Сервер и клиент должны иметь доступ к одной и той же версии общей сборки. Ваша стратегия будет зависеть от платформы - это сеть или формы?

Один из способов сделать это - заставить клиентов использовать определенную версию общей сборки и предоставить клиентам способ доставки этой сборки.

...