MessageContractMemberAttribute.ProtectionLevel Свойство

Определение

Задает значение, указывающее, должен ли член передаваться "как есть", подписанным или подписанным и зашифрованным.

public:
 property System::Net::Security::ProtectionLevel ProtectionLevel { System::Net::Security::ProtectionLevel get(); void set(System::Net::Security::ProtectionLevel value); };
public System.Net.Security.ProtectionLevel ProtectionLevel { get; set; }
member this.ProtectionLevel : System.Net.Security.ProtectionLevel with get, set
Public Property ProtectionLevel As ProtectionLevel

Значение свойства

ProtectionLevel

Одно из значений перечисления ProtectionLevel. Значение по умолчанию — None.

Комментарии

Чтобы использовать свойство ProtectionLevel в атрибутах MessageHeaderAttribute или MessageBodyMemberAttribute, следует правильно настроить привязку и поведения. При использовании этих средств безопасности без надлежащей настройки (например, при использовании ProtectionLevel.Sign с частью сообщения без предоставления учетных данных) во время выполнения будет сформировано исключение.

Кроме того, уровень защиты определяется отдельно для каждого заголовка. Однако текст SOAP имеет только один уровень защиты, независимо от количества разделов текста. Уровень защиты текста определяется наивысшим из значений свойства ProtectionLevel всех разделов текста. Например, рассмотрим следующий класс.

[MessageContract]  
public class PatientRecord  
{  
   [MessageHeader(ProtectionLevel=None)] public int recordID;  
   [MessageHeader(ProtectionLevel=Sign)] public string patientName;  
   [MessageHeader(ProtectionLevel=EncryptAndSign)] public string SSN;  
   [MessageBody(ProtectionLevel=None)] public string comments;  
   [MessageBody(ProtectionLevel=Sign)] public string diagnosis;  
   [MessageBody(ProtectionLevel=EncryptAndSign)] public string medicalHistory;  
}  

В этом примере заголовок recordID не защищается, заголовок patientName подписывается, а заголовок SSN шифруется и подписывается. Как минимум к одному разделу текста — medicalHistory — применено свойство ProtectionLevel.EncryptAndSign, следовательно, весь текст сообщения шифруется и подписывается, хотя для разделов comments и diagnosis заданы более низкие уровни защиты.

Поведение защиты в среде выполнения представляет собой сочетание значений уровня защиты, заданных для следующих свойств. Эти свойства имеют иерархическую структуру. При задании внешнего значения устанавливается значение по умолчанию для всех более узких областей, если явно не задано другое значение для более узкой области. В этом случае внешнее значение остается значением по умолчанию для всех более узких областей за исключением тех областей, для которых задано иное значение.

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

Дополнительные сведения об уровнях защиты и их допущениях и областях см. в разделе Основные сведения об уровне защиты.

Ниже приводятся области, в которых заданы эти значения.

ServiceContractAttribute.ProtectionLevel

OperationContractAttribute.ProtectionLevel

FaultContractAttribute.ProtectionLevel

MessageContractAttribute.ProtectionLevel

Свойство MessageContractMemberAttribute.ProtectionLevel атрибута System.ServiceModel.MessageHeaderAttribute.

Свойство MessageContractMemberAttribute.ProtectionLevel атрибута System.ServiceModel.MessageBodyMemberAttribute.

Если в контракте отсутствует явно заданный уровень защиты, а базовая привязка поддерживает безопасность (как на транспортном уровне, так и на уровне сообщений), эффективным уровнем защиты для всего контракта является ProtectionLevel.EncryptAndSign. Если привязка не поддерживает безопасность (например, BasicHttpBinding), эффективным уровнем System.Net.Security.ProtectionLevel является ProtectionLevel.None для всего контракта. В результате в зависимости от привязки конечной точки клиенты могут требовать разную степень защиты на уровне сообщений или транспортном уровне, даже если контракт задает ProtectionLevel.None.

Применяется к