MessageContractMemberAttribute.ProtectionLevel Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Especifica se o membro deve ser transmitido as-is, assinado, ou assinado e encriptado.
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 de Propriedade
Um dos ProtectionLevel valores. A predefinição é None.
Observações
Para utilizar a ProtectionLevel propriedade em qualquer um dos MessageHeaderAttribute atributos ou, MessageBodyMemberAttribute deve configurar corretamente o binding e os comportamentos. Se estas características de segurança forem usadas sem uma configuração adequada (por exemplo, usar ProtectionLevel.Sign com uma parte de mensagem sem fornecer credenciais de segurança), é lançada uma exceção em tempo de execução.
Além disso, o nível de proteção é determinado individualmente para cada cabeçalho. No entanto, a carroçaria 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 valor de propriedade mais elevado ProtectionLevel 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 é encriptado e assinado. Existe pelo menos uma parte do corpo, medicalHistory, com ProtectionLevel.EncryptAndSign e, portanto, todo o corpo da mensagem é encriptado e assinado, mesmo que as comments partes do corpo e diagnosis especifiquem níveis de proteção mais baixos.
O comportamento de proteção em tempo de execução é a combinação dos valores de nível de proteção definidos nas seguintes propriedades. Estas propriedades têm uma estrutura hierárquica. Definir o valor mais externo estabelece a definição padrão para todos os escopos mais estreitos, a menos que um valor diferente para um âmbito mais restrito esteja explicitamente definido. Neste caso, o valor exterior mantém-se como padrão para todos os escopos mais restritos, com exceção daquele especificamente definido.
Por exemplo, se ServiceContractAttribute.ProtectionLevel estiver definido como ProtectionLevel.EncryptAndSign e nenhum outro âmbito mais restrito tiver definições de nível de proteção, todas as mensagens num contrato operacional são encriptadas e assinadas. Se, no entanto, uma dessas operações tiver OperationContractAttribute o valor definido para ProtectionLevel.Sign, então as mensagens dessa operação são assinadas, mas todas as outras mensagens do contrato são encriptadas e assinadas.
Para detalhes sobre os níveis de proteção e as suas suposições e âmbitos, consulte Compreender o Nível de Proteção.
Os âmbimos em que estes 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 existe um nível de proteção explicitamente especificado no contrato e a vinculação subjacente suporta a segurança (seja ao nível de transporte ou de mensagem), o nível de proteção efetivo para todo o contrato é ProtectionLevel.EncryptAndSign. Se a vinculação não suportar garantia (como BasicHttpBinding), a efetiva System.Net.Security.ProtectionLevel é ProtectionLevel.None para todo o contrato. O resultado é que, dependendo da ligação ao endpoint, os clientes podem exigir proteção de segurança a nível de mensagem ou transporte, mesmo quando o contrato especifica ProtectionLevel.None.