Condividi tramite


MessageContractMemberAttribute.ProtectionLevel Proprietà

Definizione

Specifica se il membro deve essere trasmesso as-is, firmato o firmato e crittografato.

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

Valore della proprietà

Uno dei ProtectionLevel valori. Il valore predefinito è None.

Commenti

Per utilizzare la ProtectionLevel proprietà negli MessageHeaderAttribute attributi o MessageBodyMemberAttribute è necessario configurare correttamente l'associazione e i comportamenti. Se queste funzionalità di sicurezza vengono usate senza una configurazione appropriata , ad esempio usando ProtectionLevel.Sign con una parte di messaggio senza fornire credenziali di sicurezza, viene generata un'eccezione in fase di esecuzione.

Inoltre, il livello di protezione viene determinato singolarmente per ogni intestazione. Tuttavia, il corpo SOAP ha un solo livello di protezione, indipendentemente dal numero di parti del corpo. Il livello di protezione del corpo è determinato dal valore della proprietà più alto ProtectionLevel di tutte le parti del corpo. Si consideri ad esempio la classe seguente:

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

In questo esempio l'intestazione recordID non è protetta, patientName è firmata e SSN crittografata e firmata. C'è almeno una parte del corpo, medicalHistory, con ProtectionLevel.EncryptAndSign e quindi l'intero corpo del messaggio viene crittografato e firmato, anche se le parti del comments corpo e diagnosis specificano livelli di protezione inferiori.

Il comportamento di protezione in fase di esecuzione è la combinazione dei valori a livello di protezione impostati nelle proprietà seguenti. Queste proprietà hanno una struttura gerarchica. L'impostazione del valore più esterno stabilisce l'impostazione predefinita per tutti gli ambiti più stretti, a meno che non venga impostato in modo esplicito un valore diverso per un ambito più ristretto. In questo caso, il valore esterno rimane l'impostazione predefinita per tutti gli ambiti più stretti, ad eccezione di quello impostato in modo specifico.

Ad esempio, se ServiceContractAttribute.ProtectionLevel è impostato su ProtectionLevel.EncryptAndSign e nessun altro ambito più ristretto dispone di impostazioni a livello di protezione, tutti i messaggi in un contratto dell'operazione vengono crittografati e firmati. Se, tuttavia, una di queste operazioni è OperationContractAttribute impostata su ProtectionLevel.Sign, i messaggi per tale operazione vengono firmati, ma tutti gli altri messaggi nel contratto vengono crittografati e firmati.

Per informazioni dettagliate sui livelli di protezione e sui relativi presupposti e ambiti, vedere Informazioni sul livello di protezione.

Gli ambiti in cui sono impostati questi valori sono:

ServiceContractAttribute.ProtectionLevel

OperationContractAttribute.ProtectionLevel

FaultContractAttribute.ProtectionLevel

MessageContractAttribute.ProtectionLevel

Proprietà MessageContractMemberAttribute.ProtectionLevel in System.ServiceModel.MessageHeaderAttribute.

Proprietà MessageContractMemberAttribute.ProtectionLevel in System.ServiceModel.MessageBodyMemberAttribute.

Quando nel contratto non è specificato in modo esplicito alcun livello di protezione e l'associazione sottostante supporta la sicurezza (a livello di trasporto o messaggio), il livello di protezione effettivo per l'intero contratto è ProtectionLevel.EncryptAndSign. Se l'associazione non supporta la sicurezza ( ad esempio BasicHttpBinding), l'effettivo System.Net.Security.ProtectionLevel è ProtectionLevel.None per l'intero contratto. Il risultato è che, a seconda dell'associazione dell'endpoint, i client possono richiedere una protezione diversa a livello di messaggio o trasporto anche quando il contratto specifica ProtectionLevel.None.

Si applica a