Partilhar via


MessageContractMemberAttribute.ProtectionLevel Propriedade

Definição

Especifica se o membro deve ser transmitido no estado em que se encontra, assinado ou assinado e criptografado.

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

Valor da propriedade

ProtectionLevel

Um dos valores de ProtectionLevel. O padrão é None.

Comentários

Para usar a ProtectionLevel propriedade nos atributos ou MessageBodyMemberAttribute nos MessageHeaderAttribute atributos, você deve configurar corretamente a associação e os comportamentos. Se esses recursos de segurança forem usados sem uma configuração adequada (por exemplo, usando ProtectionLevel.Sign uma parte de mensagem sem fornecer credenciais de segurança), uma exceção será gerada em tempo de execução.

Além disso, o nível de proteção é determinado para cada cabeçalho individualmente. No entanto, o corpo SOAP tem apenas um nível de proteção, independentemente do número de partes do corpo. O nível de proteção do corpo é determinado pelo maior ProtectionLevel valor de propriedade de todas as partes do corpo. Por exemplo, considere a seguinte classe:

[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;  
}  

Neste exemplo, o recordID cabeçalho não está protegido, patientName está assinado e SSN é criptografado e assinado. Há pelo menos uma parte do corpo, com ProtectionLevel.EncryptAndSign e, portanto, medicalHistorytodo o corpo da mensagem é criptografado e assinado, embora as partes do corpo e especifiquem comments diagnosis níveis de proteção mais baixos.

O comportamento de proteção em runtime é a combinação dos valores de nível de proteção definidos nas propriedades a seguir. Essas propriedades têm uma estrutura hierárquica. Definir o valor mais externo estabelece a configuração padrão para todos os escopos mais estreitos, a menos que um valor diferente para um escopo mais estreito seja definido explicitamente. Nesse caso, o valor externo continua sendo o padrão para todos os escopos mais estreitos, com exceção desse conjunto específico.

Por exemplo, se ServiceContractAttribute.ProtectionLevel estiver definido ProtectionLevel.EncryptAndSign como e nenhum outro escopo mais estreito tiver configurações de nível de proteção, todas as mensagens em um contrato de operação serão criptografadas e assinadas. Se, no entanto, uma dessas operações tiver o OperationContractAttribute conjunto definido, ProtectionLevel.Signas mensagens para essa operação serão assinadas, mas todas as outras mensagens no contrato serão criptografadas e assinadas.

Para obter detalhes sobre os níveis de proteção e suas suposições e escopos, consulte Noções básicas sobre o nível de proteção.

Os escopos nos quais esses valores são definidos são:

ServiceContractAttribute.ProtectionLevel

OperationContractAttribute.ProtectionLevel

FaultContractAttribute.ProtectionLevel

MessageContractAttribute.ProtectionLevel

A MessageContractMemberAttribute.ProtectionLevel propriedade em System.ServiceModel.MessageHeaderAttribute.

A MessageContractMemberAttribute.ProtectionLevel propriedade em System.ServiceModel.MessageBodyMemberAttribute.

Quando não há nenhum nível de proteção explicitamente especificado no contrato e a associação subjacente dá suporte à segurança (seja no nível de transporte ou mensagem), o nível de proteção efetivo para todo o contrato é ProtectionLevel.EncryptAndSign. Se a associação não der suporte à segurança (como BasicHttpBinding), a eficácia System.Net.Security.ProtectionLevel será ProtectionLevel.None para todo o contrato. O resultado é que, dependendo da associação de ponto de extremidade, os clientes podem exigir proteção de segurança de nível de transporte ou mensagem diferente, mesmo quando o contrato especifica ProtectionLevel.None.

Aplica-se a