MessageContractMemberAttribute.ProtectionLevel Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u op of het lid moet worden verzonden as-is, ondertekend of ondertekend en versleuteld.
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
Waarde van eigenschap
Een van de ProtectionLevel waarden. De standaardwaarde is None.
Opmerkingen
Als u de ProtectionLevel eigenschap in de MessageHeaderAttribute of MessageBodyMemberAttribute kenmerken wilt gebruiken, moet u de binding en het gedrag juist configureren. Als deze beveiligingsfuncties worden gebruikt zonder een juiste configuratie (bijvoorbeeld door een berichtonderdeel te gebruiken ProtectionLevel.Sign zonder beveiligingsreferenties op te leveren) wordt er tijdens de runtime een uitzondering gegenereerd.
Daarnaast wordt het beveiligingsniveau voor elke header afzonderlijk bepaald. De SOAP-body heeft echter slechts één beveiligingsniveau, ongeacht het aantal lichaamsdelen. Het beveiligingsniveau van de hoofdtekst wordt bepaald door de hoogste ProtectionLevel eigenschapswaarde van alle lichaamsdelen. Denk bijvoorbeeld aan de volgende klasse:
[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 dit voorbeeld is de recordID header niet beveiligd, patientName ondertekend en SSN versleuteld en ondertekend. Er is ten minste één hoofdgedeelte, medicalHistorymet ProtectionLevel.EncryptAndSign en dus de volledige berichttekst is versleuteld en ondertekend, ook al geven de onderdelen van de comments hoofdtekst diagnosis lagere beveiligingsniveaus op.
Het beveiligingsgedrag tijdens runtime is de combinatie van de waarden op beveiligingsniveau die zijn ingesteld op de volgende eigenschappen. Deze eigenschappen hebben een hiërarchische structuur. Als u de buitenste waarde instelt, wordt de standaardinstelling voor alle smallere bereiken ingesteld, tenzij een andere waarde voor een smaller bereik expliciet is ingesteld. In dit geval blijft de buitenste waarde de standaardwaarde voor alle smallere bereiken, met uitzondering van die specifieke set.
Als bijvoorbeeld ServiceContractAttribute.ProtectionLevel is ingesteld op ProtectionLevel.EncryptAndSign en er geen andere smallere bereiken beveiligingsniveauinstellingen hebben, worden alle berichten in een bewerkingscontract versleuteld en ondertekend. Als een van deze bewerkingen echter is OperationContractAttribute ingesteld ProtectionLevel.Signop , worden de berichten voor die bewerking ondertekend, maar alle andere berichten in het contract versleuteld en ondertekend.
Zie Understanding Protection Level voor meer informatie over beveiligingsniveaus en hun veronderstellingen en bereiken.
De bereiken waarvoor deze waarden zijn ingesteld, zijn:
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
De MessageContractMemberAttribute.ProtectionLevel eigenschap op System.ServiceModel.MessageHeaderAttribute.
De MessageContractMemberAttribute.ProtectionLevel eigenschap op System.ServiceModel.MessageBodyMemberAttribute.
Wanneer er geen beveiligingsniveau expliciet op het contract is opgegeven en de onderliggende binding beveiliging ondersteunt (ongeacht of het transport- of berichtniveau is), is ProtectionLevel.EncryptAndSignhet effectieve beveiligingsniveau voor het hele contract . Als de binding geen ondersteuning biedt voor beveiliging (zoalsBasicHttpBinding), is ProtectionLevel.None de effectieve System.Net.Security.ProtectionLevel waarde voor het hele contract. Het resultaat is dat clients, afhankelijk van de eindpuntbinding, verschillende beveiliging op bericht- of transportniveau kunnen vereisen, zelfs wanneer het contract aangeeft ProtectionLevel.None.