MessageContractMemberAttribute.ProtectionLevel Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt an, ob der Member unverändert, signiert oder signiert und verschlüsselt übertragen werden soll.
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
Eigenschaftswert
Einer der ProtectionLevel-Werte. Der Standardwert ist None.
Hinweise
Um die ProtectionLevel-Eigenschaft im MessageHeaderAttribute-Attribut oder MessageBodyMemberAttribute-Attribut zu verwenden, müssen Sie die Bindung und das Verhalten entsprechend konfigurieren. Wenn diese Sicherheitsfunktionen ohne angemessene Konfiguration verwendet werden (z. B. bei Verwendung von ProtectionLevel.Sign mit einem Nachrichtenteil ohne Angabe der Sicherheitseinstellungen), wird zur Laufzeit eine Ausnahme ausgelöst.
Zusätzlich wird die Schutzebene für jeden Header einzeln bestimmt. Der SOAP-Text verfügt jedoch unabhängig von der Anzahl der Textteile nur über eine Schutzebene. Die Schutzebene des Texts wird durch den höchsten ProtectionLevel-Eigenschaftswert aller Textteile bestimmt. Betrachten Sie beispielsweise die folgende 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 diesem Beispiel ist der recordID
-Header nicht geschützt, patientName
ist signiert und SSN
ist verschlüsselt und signiert. Mindestens ein Textteil, nämlich medicalHistory
, ist auf ProtectionLevel.EncryptAndSign festgelegt, sodass der gesamte Nachrichtentext verschlüsselt und signiert wird, obwohl für die Textteile comments
und diagnosis
niedrigere Schutzebenen angegeben sind.
Das Schutzverhalten zur Laufzeit entspricht der Kombination der Schutzebenenwerte für die folgenden Eigenschaften. Diese Eigenschaften verfügen über eine hierarchische Struktur. Mit der Festlegung des äußersten Werts wird die Standardeinstellung für alle engeren Bereiche festgelegt, es sei denn, es wird ausdrücklich ein anderer Wert für einen engeren Bereich definiert. In diesem Fall bleibt der äußere Wert der Standardwert für alle engeren Bereiche mit Ausnahme des ausdrücklich festgelegten Werts.
Wenn beispielsweise ServiceContractAttribute.ProtectionLevel auf ProtectionLevel.EncryptAndSign festgelegt ist und für keine weiteren engeren Bereiche Schutzebeneneinstellungen definiert sind, werden alle Nachrichten in einem Vorgangsvertrag verschlüsselt und signiert. Wenn aber für einen dieser Vorgänge OperationContractAttribute auf ProtectionLevel.Sign festgelegt ist, werden die Nachrichten für diesen Vorgang signiert, alle anderen Nachrichten im Vertrag werden jedoch verschlüsselt und signiert.
Ausführliche Informationen zu Schutzebenen und deren Annahmen und Bereichen finden Sie unter Grundlegendes zur Schutzebene.
Die Bereiche, für die diese Werte festgelegt wurden:
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
Die MessageContractMemberAttribute.ProtectionLevel-Eigenschaft für System.ServiceModel.MessageHeaderAttribute.
Die MessageContractMemberAttribute.ProtectionLevel-Eigenschaft für System.ServiceModel.MessageBodyMemberAttribute.
Wenn im Vertrag nicht ausdrücklich eine Schutzebene festgelegt ist und die zugrunde liegende Bindung Sicherheitsfunktionen (auf der Transport- oder Nachrichtenebene) unterstützt, ist die effektive Schutzebene für den gesamten Vertrag ProtectionLevel.EncryptAndSign. Wenn die Bindung keine Sicherheitsfunktionen (wie beispielsweise BasicHttpBinding) unterstützt, ist die effektive System.Net.Security.ProtectionLevel für den gesamten Vertrag ProtectionLevel.None. Im Ergebnis können Clients abhängig von der Endpunktbindung unterschiedlichen Nachrichten- oder Transportebenenschutz auch dann anfordern, wenn im Vertrag ProtectionLevel.None angegeben ist.