Я думаю, что WCF может быть вашим лучшим выбором. Он может обрабатывать передачу неизвестных полей своему потребителю, даже если он не знает, как их десериализовать.
Пример:
Служба A: знает о версии 2 класса Widget, который имеет поле описания
Служба B: знает о версии 1 класса Widget, который не имеет поля Description
Служба C: знает о версии 2 класса Widget, который имеет поле описания
Если служба A вызывает службу B, передающую объект Widget, а затем служба B вызывает службу C, передающую тот же объект Widget, тогда служба C получит поле Description, как оно было передано из службы A. Служба B не будет иметь никакого описания. поле, но когда оно десериализует его и повторно сериализует, оно просто пропустит поле Описание, не зная, что это такое.
Таким образом, вы можете использовать службы WCF с внутрипроцессным взаимодействием.
См. Эту ссылку для получения дополнительной информации о версиях контрактов wcf .