Какова цель свойства 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);
}
Здесь представлены два класса
Информация о файле
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 означает; Заголовок содержит важные данные для обработки, и получатель сообщения (служба) должен обработать заголовки. Если получатель не может понять (не может обработать) заголовок или не получил заголовок, возникнет ошибка.