MessageContractMemberAttribute.ProtectionLevel Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica si el miembro será transmitido tal cual, está firmado, o firmado y cifrado.
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 propiedad
Uno de los valores de ProtectionLevel. De manera predeterminada, es None.
Comentarios
Para utilizar la propiedad ProtectionLevel en los atributos MessageHeaderAttribute o MessageBodyMemberAttribute, debe configurar el enlace y los comportamientos correctamente. Si estas características de seguridad se utilizan sin una configuración apropiada (por ejemplo, utilizando ProtectionLevel.Sign con una parte del mensaje sin proporcionar las credenciales de seguridad), se iniciará una excepción en el tiempo de ejecución.
Además, el nivel de protección se determina individualmente para cada encabezado. Sin embargo, el cuerpo SOAP tiene sólo un nivel de protección, sin tener en cuenta el número de partes del cuerpo. El valor de propiedad ProtectionLevel más alto de todas las partes del cuerpo determina el nivel de protección del cuerpo. Por ejemplo, considere la siguiente clase:
[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;
}
En este ejemplo, el encabezado recordID
no está protegido, se firma patientName
, y se cifra y se firma SSN
. Hay por lo menos una parte del cuerpo, medicalHistory
, con ProtectionLevel.EncryptAndSign y así el cuerpo del mensaje completo se cifra y firma, aun cuando las partes del cuerpo comments
y diagnosis
especifican los niveles más bajos de protección.
El comportamiento de protección en el tiempo de ejecución es la combinación de los valores de nivel de protección definida en las propiedades siguientes. Estas propiedades tienen una estructura jerárquica. Al establecer el valor extremo, se establece la configuración predeterminada para todos los ámbitos más restringidos a menos que se establezca un valor diferente para un ámbito más restringido explícitamente. En este caso, el valor externo sigue siendo el predeterminado para todos los ámbitos más restringidos con la excepción del definido específicamente.
Por ejemplo, si ServiceContractAttribute.ProtectionLevel está establecido en ProtectionLevel.EncryptAndSign y ningún otro ámbito más restringido tiene valores de nivel de protección, se cifrarán y firmarán todos los mensajes en un contrato de la operación. Si, sin embargo, una de esas operaciones tiene OperationContractAttribute definido en ProtectionLevel.Sign, se firmarán los mensajes para esa operación pero se cifrarán y firmarán todos los demás mensajes en el contrato.
Para más información sobre los niveles de protección y sus suposiciones y ámbitos, consulte Descripción del nivel de protección.
Los ámbitos en los que se establecen estos valores son:
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
La propiedad MessageContractMemberAttribute.ProtectionLevel en System.ServiceModel.MessageHeaderAttribute.
La propiedad MessageContractMemberAttribute.ProtectionLevel en System.ServiceModel.MessageBodyMemberAttribute.
Cuando no se haya especificado de manera concreta ningún nivel de protección en el contrato y el enlace subyacente admita la seguridad (ya sea en el nivel de transporte o de mensaje), el nivel de protección efectivo para todo el contrato será ProtectionLevel.EncryptAndSign. Si el enlace no admite la seguridad (como BasicHttpBinding), el System.Net.Security.ProtectionLevel eficaz será ProtectionLevel.None para todo el contrato. El resultado será (en función del enlace del punto de conexión) que los clientes pueden exigir una protección de nivel de seguridad diferente para los mensajes o el transporte aun cuando el contrato especifique ProtectionLevel.None.