Заголовок сообщения WCF против messagebodymember? - PullRequest
3 голосов
/ 08 июля 2011

Я не понимаю, когда я должен поставить [MessageHeader] вместо [MessageBodyMember]?

У меня есть read , который используется для соответствия некоторым протоколам, таким как Soap, но все же,что это меняет в конце?

Ответы [ 3 ]

4 голосов
/ 08 июля 2011

SOAP - это протокол, в котором каждое сообщение (запрос или ответ) состоит из двух частей: Заголовок и Тело внутри Конверта :

<s:Envelope xmlns:s='the namespace for the soap version'>
  <s:Header>
    <!-- SOAP headers will come here -->
  </s:Header>
  <s:Body>
    <!-- SOAP body members will come here -->
  </s:Body>
</s:Envelope>

Обычно вы не будете использовать [MessageContract] (и MessageHeader или MessageBodyMember) в сервисах WCF, только если вам действительно нужно взаимодействовать с какой-либо третьей стороной, которая ожидает данные в определенном формате.

1 голос
/ 08 июля 2011

Вы можете рассматривать это как разницу между данными сообщения (MessageBodyMember) и метаданными сообщения (MessageHeader).В WCF имеется множество встроенных стандартизированных заголовков, которые касаются адресации, безопасности, надежного обмена сообщениями и т. Д. В реализации WCF по умолчанию это относится только к SOAP.

Существует также общее правило, что в сложной архитектуре обмена сообщениямимогут быть посредники, которые читают метаданные и используют их для некоторой обработки и маршрутизации сообщений (они могут даже добавлять дополнительные метаданные), но они никогда не должны вмешиваться в тело сообщения (данные).В случае безопасности они могут даже не иметь возможности прочитать тело сообщения или некоторые метаданные (заголовки).

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

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

1 голос
/ 08 июля 2011

Я думаю, что когда я хочу добавить что-то независимое от содержимого сообщения, я добавлю это в заголовок сообщения.И если вы хотите, чтобы другая сторона прочитала что-то из вашего сообщения, оно должно быть помещено в заголовок, потому что иногда вы можете разрешить кому-либо читать заголовок сообщения, а не тело сообщения, поскольку оно содержит конфиденциальное содержимое.

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