Обычно я стараюсь избегать использования наследования в контрактах WCF, предпочитая композицию.
Но в следующей ситуации ...
- У меня есть сервисная операция, которая может привести к одной из двух вещей: ResultA и ResultB.
- В ответном сообщении содержится логическое значение / перечисление, сообщающее об этом результате.
- В ответном сообщении есть ряд других свойств. Некоторые из них актуальны только в случае ResultA, а некоторые - только в случае ResultB.
Я вижу свои варианты:
- Имейте один контракт с ответным сообщением, который содержит все, и когда свойства не релевантны, они остаются равными нулю Затем клиент должен посмотреть на bool / enum, чтобы увидеть его ResultA или ResultB и соответственно игнорировать свойства.
- Имеет 2 контракта с ответными сообщениями, оба наследуются от общей базы. Один представляет ResultA и его соответствующие свойства, а другой представляет ResultB и его соответствующие свойства.
Я предпочитаю вариант 2 по ряду причин, но он нарушает композицию по правилу наследования.
Что думают люди?