MessageContractMemberAttribute.ProtectionLevel Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger om medlemmen ska överföras as-is, signerad eller signerad och krypterad.
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
Egenskapsvärde
Ett av ProtectionLevel värdena. Standardvärdet är None.
Kommentarer
Om du vill använda ProtectionLevel egenskapen i antingen attributen MessageHeaderAttribute eller MessageBodyMemberAttribute måste du konfigurera bindningen och beteendet korrekt. Om dessa säkerhetsfunktioner används utan en korrekt konfiguration (till exempel att använda ProtectionLevel.Sign med en meddelandedel utan att ange säkerhetsautentiseringsuppgifter) genereras ett undantag vid körning.
Dessutom bestäms skyddsnivån för varje rubrik individuellt. SOAP-kroppen har dock bara en skyddsnivå, oavsett antalet kroppsdelar. Brödtextens skyddsnivå bestäms av det högsta ProtectionLevel egenskapsvärdet för alla kroppsdelar. Tänk till exempel på följande klass:
[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;
}
I det här exemplet recordID är rubriken inte skyddad, patientName signerad och SSN krypterad och signerad. Det finns minst en brödtextdel, medicalHistory, med ProtectionLevel.EncryptAndSign och därmed krypteras och signeras hela meddelandetexten, även om brödtextdelarna comments och diagnosis anger lägre skyddsnivåer.
Skyddsbeteendet vid körning är kombinationen av de skyddsnivåvärden som anges i följande egenskaper. Dessa egenskaper har en hierarkisk struktur. Om du anger det yttersta värdet upprättas standardinställningen för alla smalare omfång såvida inte ett annat värde för ett smalare omfång uttryckligen anges. I det här fallet förblir det yttre värdet standardvärdet för alla smalare omfång med undantag för den specifika uppsättningen.
Om ServiceContractAttribute.ProtectionLevel till exempel är inställt på ProtectionLevel.EncryptAndSign och inga andra smalare omfång har inställningar för skyddsnivå krypteras och signeras alla meddelanden i ett åtgärdskontrakt. Men om en av dessa åtgärder har OperationContractAttribute värdet ProtectionLevel.Sign, signeras meddelandena för den åtgärden, men alla andra meddelanden i kontraktet krypteras och signeras.
Mer information om skyddsnivåer och deras antaganden och omfattningar finns i Förstå skyddsnivå.
De omfång där dessa värden anges är:
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
Egenskapen MessageContractMemberAttribute.ProtectionLevel på System.ServiceModel.MessageHeaderAttribute.
Egenskapen MessageContractMemberAttribute.ProtectionLevel på System.ServiceModel.MessageBodyMemberAttribute.
När det inte finns någon uttryckligen angiven skyddsnivå i kontraktet och den underliggande bindningen stöder säkerhet (oavsett om det är på transport- eller meddelandenivå) är ProtectionLevel.EncryptAndSignden effektiva skyddsnivån för hela kontraktet . Om bindningen inte stöder säkerhet (till exempel BasicHttpBinding) System.Net.Security.ProtectionLevel gäller ProtectionLevel.None hela kontraktet. Resultatet är att beroende på slutpunktsbindningen kan klienter kräva olika säkerhetsskydd på meddelande- eller transportnivå även när kontraktet anger ProtectionLevel.None.