2009-10-07 3 views
3

На какой основе мы должны решить, нужно ли нам создавать dataContract или MessageContract для моих служб WCF.Когда я должен использовать datacontract и когда messagecontract в WCF

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

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

Просьба представить некоторые реальные сценарии жизни.

ответ

4

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

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

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

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

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

Marc

3

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

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

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

Смежные вопросы