Какова цель свойства MustUnderstand в WCF?

Я прочитал несколько примеров о потоковой связи в WCF и заметил, что MessageHeader атрибуты указываются с MustUnderstand свойство установлено в true, Какова цель этого имущества? Почему это свойство установлено в true?

2 ответа

Решение

Атрибут MustUnderstand указывает, должен ли узел, обрабатывающий заголовок, понимать его.

Представьте, что вас попросили написать веб-сервис, который должен был предоставить единственную операцию (метод), которая позволила бы пользователю загрузить файл с использованием WCF.

Начнем с открытия Visual Studio и создания библиотеки служб WCF. По умолчанию она содержит IService а также Service.cs мы переименуем его в IFileUploadService.cs

[ServiceContract]
public interface IFileUploadService
{
    [OperationContract]
    FileReceivedInfo Upload(FileInfo fileInfo);
 }

Здесь представлены два класса

  1. Информация о файле

  2. FileReceivedInfo

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

         [MessageContract]
         public class FileInfo
         {
              [MessageHeader(MustUnderstand = true)]
               public string FileName { get; set; }
    
               [MessageHeader(MustUnderstand = true)]
               public long Length { get; set; }
    
               [MessageBodyMember(Order = 1)]
               public Stream Stream { get; set; }
          }
    

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

Заголовки могут обрабатываться независимо от тела. Это позволяет промежуточному приложению определять, может ли оно обрабатывать тело, обеспечивать необходимую безопасность, сеанс и т. Д. И т. Д.

mustUnderstand = 1 означает, что получатель сообщения должен обработать элемент заголовка

должен понимать =0 или отсутствует означает, что элемент заголовка является необязательным

Просто MustUnderstand=true означает; Заголовок содержит важные данные для обработки, и получатель сообщения (служба) должен обработать заголовки. Если получатель не может понять (не может обработать) заголовок или не получил заголовок, возникнет ошибка.

Другие вопросы по тегам