MessageContractMemberAttribute.ProtectionLevel Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, должен ли член передаваться as-is, подписан или подписан и зашифрован.
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 . Значение по умолчанию — None.
Комментарии
Чтобы использовать свойство в атрибутах ProtectionLevelMessageHeaderAttribute , 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 этом весь текст сообщения шифруется и подписывается, даже если commentsdiagnosis части тела указывают более низкие уровни защиты.
Поведение защиты во время выполнения — это сочетание значений уровня защиты, заданных в следующих свойствах. Эти свойства имеют иерархическую структуру. Установка самого внешнего значения устанавливает параметр по умолчанию для всех узких областей, если только не задано явно другое значение для более узкой области. В этом случае внешнее значение остается значением по умолчанию для всех узких областей, за исключением этого конкретного набора.
Например, если ServiceContractAttribute.ProtectionLevel задано ProtectionLevel.EncryptAndSign значение и нет других узких областей с параметрами уровня защиты, все сообщения в контракте операции шифруются и подписываются. Однако если одна из этих операций имеет OperationContractAttribute значение set 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.ProtectionLevelProtectionLevel.None для всего контракта). Результатом является то, что в зависимости от привязки конечной точки клиенты могут требовать разные сообщения или защиту уровня безопасности транспорта даже при указании ProtectionLevel.Noneконтракта.