когда я должен использовать datacontract и когда messagecontract в WCF - PullRequest
3 голосов
/ 07 октября 2009

ПО какой основе мы должны решить, нужно ли нам создавать dataContract или MessageContract для моих служб WCF.

Что я знаю, так это то, что когда нам нужно больше контролировать SOAP, мы используем MessageContract.

Во-вторых, я видел некоторый код, в котором DataContract предоставляется через MessageContract. Как его использовать.

Пожалуйста, предоставьте некоторые реальные сценарии.

Ответы [ 2 ]

4 голосов
/ 07 октября 2009

Это не вопрос «или-или» - у вас всегда будут контракты на данные, если вы имеете дело с составными данными (не только с базовыми типами int, string и т. Д.). Это данность.

Вам когда-либо понадобятся контракты на сообщения, если вам нужно очень тесно и очень точно контролировать макет ваших сообщений SOAP. В большинстве случаев более 90% времени - нет.

Контракт сообщения позволяет вам конкретно указать, какие элементы (скалярные типы или составные типы в качестве DataContracts) будут в заголовке SOAP, а какие - в теле SOAP.

Это может понадобиться вам, если у вас есть коммуникационный партнер, для которого требуется очень специфический формат, и вам необходимо настроить сообщения SOAP, чтобы они точно соответствовали заданному макету. Это единственный допустимый сценарий, когда вам нужно и нужно использовать контракты на сообщения.

Итак, короче говоря: всегда используйте контракты на данные, практически никогда не используйте контракты на сообщения (если вы абсолютно, положительно не должны).

Марк

3 голосов
/ 07 октября 2009

Если вам нужно явно перенять заголовки и тело SOAP, вы должны использовать MessageContracts. Например, если вам нужно было убедиться, что номер кредитной карты был зашифрован в вашем сообщении отдельно от остальной части вашего типа, вам необходимо получить этот уровень контроля над сообщением в сети.

Вот более подробная информация об этом с некоторыми примерами (в частности, с примером шифрования): http://msdn.microsoft.com/en-us/library/ms730255.aspx

Если вы просто хотите получить чистые DTO и не заботитесь об их форме на проводе, используйте DataContracts.

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