Partager via


MessageContractMemberAttribute.ProtectionLevel Propriété

Définition

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.

S’applique à