MessageContractMemberAttribute.ProtectionLevel Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Spécifie si le membre doit être transmis tel quel, signé ou signé et chiffré.
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
Valeur de propriété
Une des valeurs de l'objet ProtectionLevel. La valeur par défaut est None.
Remarques
Pour utiliser la propriété ProtectionLevel dans les attributs MessageHeaderAttribute ou MessageBodyMemberAttribute, vous devez configurer correctement la liaison et les comportements. Si ces fonctionnalités de sécurité sont utilisées sans configuration correcte (par exemple, à l’aide de ProtectionLevel.Sign avec une partie de message sans fournir les informations d’identification de sécurité), une exception est levée au moment de l’exécution.
De plus, le niveau de protection est déterminé individuellement pour chaque en-tête. Toutefois, le corps SOAP a un seul niveau de protection, quel que soit le nombre de parties du corps. Le niveau de protection du corps est déterminé par la valeur de propriété ProtectionLevel la plus élevée de toutes les parties du corps. Par exemple, considérons la classe suivante :
[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;
}
Dans cet exemple, l'en-tête recordID
n'est pas protégé, patientName
est signé et SSN
est chiffré et signé. Il y a au moins une partie du corps, medicalHistory
, avec ProtectionLevel.EncryptAndSign et donc la totalité du corps du message est chiffrée et signée, même si les parties du corps comments
et diagnosis
spécifient des niveaux de protection inférieurs.
Le comportement de protection au moment de l'exécution est la combinaison des valeurs de niveau de protection affectées aux propriétés suivantes. Ces propriétés ont une structure hiérarchique. La définition de la valeur la plus à l'extérieur établit le paramètre par défaut pour toutes les portées plus restreintes, sauf si une valeur différente est définie explicitement pour une portée plus restreinte. Dans ce cas, la valeur externe reste la valeur par défaut pour toutes les portées plus restreintes à l'exception de celles qui sont spécifiquement définies.
Par exemple, si ServiceContractAttribute.ProtectionLevel a la valeur ProtectionLevel.EncryptAndSign et qu'aucune autre portée plus étroite n'a de paramètres de niveau de protection, tous les messages dans un contrat d'opération sont chiffrés et signés, y compris les messages d'erreur. Toutefois, si vous affectez au jeu OperationContractAttribute de l'une de ces opérations, la valeur ProtectionLevel.Sign, les messages pour cette opération sont signés mais tous les autres messages dans le contrat sont chiffrés et signés.
Pour plus d’informations sur les niveaux de protection et leurs hypothèses et étendues, consultez Présentation du niveau de protection.
Les portées auxquelles ces valeurs sont affectées sont les suivantes :
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
Propriété MessageContractMemberAttribute.ProtectionLevel sur System.ServiceModel.MessageHeaderAttribute.
Propriété MessageContractMemberAttribute.ProtectionLevel sur System.ServiceModel.MessageBodyMemberAttribute.
Lorsque aucun niveau de protection n’est spécifié explicitement sur le contrat et que la liaison sous-jacente prend en charge la sécurité (au niveau du transport ou du message), le niveau de protection effectif pour l’ensemble du contrat est ProtectionLevel.EncryptAndSign. Si la liaison ne prend pas en charge la sécurité (comme BasicHttpBinding), le System.Net.Security.ProtectionLevel effectif est ProtectionLevel.None pour l'ensemble du contrat. Le résultat est que selon la liaison du point de terminaison, les clients peuvent avoir besoin d’une protection de sécurité au niveau du message ou du transport différente même lorsque le contrat spécifie ProtectionLevel.None.