MessageContractMemberAttribute.ProtectionLevel Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa, czy element członkowski ma być przesyłany jako, podpisany, czy podpisany i zaszyfrowany.
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
Wartość właściwości
ProtectionLevel Jedna z wartości. Wartość domyślna to None.
Uwagi
Aby korzystać z ProtectionLevel właściwości w MessageHeaderAttribute atrybutach lub MessageBodyMemberAttribute , należy prawidłowo skonfigurować powiązanie i zachowania. Jeśli te funkcje zabezpieczeń są używane bez odpowiedniej konfiguracji (na przykład z ProtectionLevel.Sign częścią komunikatu bez podawania poświadczeń zabezpieczeń), w czasie wykonywania jest zgłaszany wyjątek.
Ponadto poziom ochrony jest określany indywidualnie dla każdego nagłówka. Jednak treść soap ma tylko jeden poziom ochrony, niezależnie od liczby części ciała. Poziom ochrony ciała jest określany przez najwyższą ProtectionLevel wartość właściwości wszystkich części ciała. Rozważmy na przykład następującą klasę:
[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;
}
W tym przykładzie recordID
nagłówek nie jest chroniony, patientName
jest podpisany i SSN
jest szyfrowany i podpisany. Istnieje co najmniej jedna część treści, medicalHistory
, z i w związku z ProtectionLevel.EncryptAndSign tym cała treść wiadomości jest zaszyfrowana i podpisana, mimo że comments
części treści i diagnosis
określają niższe poziomy ochrony.
Zachowanie ochrony w czasie wykonywania jest kombinacją wartości na poziomie ochrony ustawionych na następujących właściwościach. Te właściwości mają strukturę hierarchiczną. Ustawienie najbardziej zewnętrznej wartości określa ustawienie domyślne dla wszystkich węższych zakresów, chyba że jawnie ustawiono inną wartość dla węższego zakresu. W tym przypadku wartość zewnętrzna pozostaje wartością domyślną dla wszystkich węższych zakresów z wyjątkiem tego specjalnie ustawionego.
Jeśli na przykład ServiceContractAttribute.ProtectionLevel ustawiono wartość ProtectionLevel.EncryptAndSign i żadne inne węższe zakresy nie mają ustawień poziomu ochrony, wszystkie komunikaty w kontrakcie operacji są szyfrowane i podpisane. Jeśli jednak jedna z tych operacji ma ustawioną OperationContractAttribute wartość ProtectionLevel.Sign, komunikaty dla tej operacji są podpisane, ale wszystkie inne komunikaty w kontrakcie są szyfrowane i podpisane.
Aby uzyskać szczegółowe informacje na temat poziomów ochrony oraz ich założeń i zakresów, zobacz Understanding Protection Level (Omówienie poziomu ochrony).
Zakresy, w których są ustawione następujące wartości:
ServiceContractAttribute.ProtectionLevel
OperationContractAttribute.ProtectionLevel
FaultContractAttribute.ProtectionLevel
MessageContractAttribute.ProtectionLevel
Właściwość MessageContractMemberAttribute.ProtectionLevel na System.ServiceModel.MessageHeaderAttribute.
Właściwość MessageContractMemberAttribute.ProtectionLevel na System.ServiceModel.MessageBodyMemberAttribute.
Jeśli w umowie nie określono jawnie poziomu ochrony, a bazowe powiązanie obsługuje zabezpieczenia (zarówno na poziomie transportu, jak i komunikatu), efektywnym poziomem ochrony dla całego kontraktu jest ProtectionLevel.EncryptAndSign. Jeśli powiązanie nie obsługuje zabezpieczeń (takich jak BasicHttpBinding), obowiązująca System.Net.Security.ProtectionLevel jest ProtectionLevel.None dla całej umowy. W zależności od powiązania punktu końcowego klienci mogą wymagać innej ochrony zabezpieczeń na poziomie komunikatu lub transportu, nawet jeśli kontrakt określa ProtectionLevel.Nonewartość .