Это не вопрос «или-или» - у вас всегда будут контракты на данные, если вы имеете дело с составными данными (не только с базовыми типами int, string и т. Д.). Это данность.
Вам когда-либо понадобятся контракты на сообщения, если вам нужно очень тесно и очень точно контролировать макет ваших сообщений SOAP. В большинстве случаев более 90% времени - нет.
Контракт сообщения позволяет вам конкретно указать, какие элементы (скалярные типы или составные типы в качестве DataContracts) будут в заголовке SOAP, а какие - в теле SOAP.
Это может понадобиться вам, если у вас есть коммуникационный партнер, для которого требуется очень специфический формат, и вам необходимо настроить сообщения SOAP, чтобы они точно соответствовали заданному макету. Это единственный допустимый сценарий, когда вам нужно и нужно использовать контракты на сообщения.
Итак, короче говоря: всегда используйте контракты на данные, практически никогда не используйте контракты на сообщения (если вы абсолютно, положительно не должны).
Марк