Хотя я прочитал некоторые статьи WCF о контракте с сообщениями, но я не могу понять, что является реальным использованием контракта с сообщением. Могу ли я использовать MessageContract
вместо DataContract
или в дополнение к DataContract
?
DataContract vs Message Contract
Ответ 1
A DataContract - это описание типа, которое отображается и поддерживается вашим сервисом. A MessageContract является абстракцией над сообщением SOAP, которое позволяет явно определять структуру базового сообщения.
Они призваны дополнять друг друга и служить различным целям.
Ответ 2
Марк Гравелл ответил на аналогичный вопрос WCF: MessageContract, DataContract... Confused?
Одним из преимуществ сообщений-контрактов является то, что вы можете установить конфиденциальность против членов, но во многих случаях это необязательно. В таком я предпочитаю, чтобы контракт был максимально простым, так же как данных контракта.
Ответ 3
Используя DataContract, служба может выставлять типы, которые она меняет. Но XML (SOAP), который заменен, не контролируется (хотя и воздействует) на него. Хотя MessageContract может использоваться для явного определения способа структурирования XML (SOAP-сообщения).
Ответ 4
Обычно при создании приложений Windows Communication Foundation (WCF) разработчики уделяют пристальное внимание структурам данных и проблемам сериализации и не нуждаются в структуре сообщений, в которых переносятся данные. Для этих приложений создание контрактов данных для параметров или возвращаемых значений является простым.
Однако иногда полный контроль над структурой сообщения SOAP столь же важен, как и контроль над его содержимым. Это особенно актуально, когда важна интероперабельность или специально контролирует проблемы безопасности на уровне сообщения или части сообщения. В этих случаях вы можете создать контракт с сообщением, который позволяет вам указать структуру точного сообщения SOAP.
Для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/ms730255(v=vs.110).aspx
Ответ 5
Одна из лучших в контракте на сообщение заключается в том, что он всегда поможет вам добавить дополнительную безопасность или написать оболочку для целей аутентификации, чтобы сделать аутентифицированный вызов сервисам (это может включать как WCF, так и WS), в то время как клиент делает вызов для обслуживания.
Контракт с сообщением также помогает диагностировать связь между клиентом и сервисом, вводя другой инспектор сообщений.