OperationContractAttribute.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 值之一。 默认值为 None

例外

该值不是 ProtectionLevel 值之一。

注解

使用 ProtectionLevel 属性控制是否必须对操作消息进行加密和/或签名。 除非较窄范围重写此处设置的值,否则此值是为此操作指定的所有消息的默认值。

请记住,运行时的保护行为是在下列属性中设置的保护级别值的组合,这一点很重要。 这些属性具有层次结构。 除非已为较窄范围显式设置了某个不同的值,否则设置最外层的值将为所有较窄的范围确定默认设置。 在这种情况下,外层的值将保持所有较窄的范围的默认设置,但特定的设置除外。

例如,如果将 ServiceContractAttribute.ProtectionLevel 设置为 ProtectionLevel.EncryptAndSign,并且其他较窄范围都没有设置保护级别,则会对操作协定中的所有消息进行加密和签名。 但是,如果其中一个操作将 ProtectionLevel 设置为 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,客户端也可以要求不同的消息或传输级别安全保护。

适用于