Нижче наведені основні відомості про функції рівня захисту.
Для будь-якої частини повідомлення існують три базових рівня захисту. Для властивості (де б воно не з'являлося) задається одне зі значень перерахування ProtectionLevel. Ці значення вказані нижче в порядку зростання рівня захисту.
Sign. Захищена частина підписується цифровим підписом. Це гарантує захист захищеної частини повідомлення від будь-якої підробки.
EncryptAndSign. Для забезпечення конфіденційності частина повідомлення перед підписанням шифрується.
За допомогою цієї функції можна задати вимоги до захисту тільки для даних додатків. Наприклад, заголовки WS-Addressing є даними інфраструктури і, отже, ProtectionLevel їх не зачіпає.
Коли для режиму безпеки задано значення Transport. всі повідомлення захищається механізмом транспорту. Тому установка окремого рівня захисту для різних частин повідомлення не має ефекту.
ProtectionLevel дозволяє розробнику встановити мінімальний рівень. якому повинна відповідати прив'язка. Коли служба розгорнута, фактична прив'язка, задана в конфігурації, може підтримувати або не підтримувати цей мінімальний рівень. Наприклад, за замовчуванням клас BasicHttpBinding не забезпечує безпеку (хоча забезпечення безпеки може бути включено). Тому використання цього класу з контрактом, параметр якого відмінний від None. буде приводити до виклику виключення.
Якщо служба вимагає, щоб мінімальний рівень ProtectionLevel для всіх повідомлень був Sign. клієнт (можливо, створений не технологією WCF) може шифрувати і підписувати всі повідомлення (що перевищує необхідний мінімум). В цьому випадку WCF не викликатиме виняток, оскільки дії клієнта перевищують мінімальну вимогу. Однак слід мати на увазі, що додатки WCF (служби або клієнти) по можливості не будуть надмірно захищати частина повідомлення, а будуть забезпечувати відповідність мінімального рівня. Зверніть також увагу, що при використанні режиму Transport як режим безпеки транспорт може надмірно захищати потік повідомлень, оскільки він не здатний забезпечити захист на більш детальному рівні.
Якщо для ProtectionLevel явно задається значення Sign або EncryptAndSign. необхідно використовувати прив'язку до дозволеного забезпеченням безпеки. В іншому випадку буде викликано виключення.
Якщо вибирається прив'язка, роздільна забезпечення безпеки, а властивість ProtectionLevel ніде в контракті не задається, всі дані додатків будуть шифруватися і підписуватися.
Якщо вибирається прив'язка, в якій не дозволено забезпечення безпеки (наприклад, в класі BasicHttpBinding забезпечення безпеки заборонено за замовчуванням), і рівень ProtectionLevel явно не заданий, дані додатків захищатися не будуть.
Якщо використовується прив'язка, яка забезпечує безпеку на транспортному рівні, всі дані додатків будуть захищатися відповідно до можливостей транспорту.
Якщо використовується прив'язка, яка забезпечує безпеку на рівні повідомлень, дані додатків будуть захищатися відповідно до рівнів захисту, заданими в контракті. Якщо рівень захисту не задається, всі дані додатків в повідомленнях будуть шифруватися і підписуватися.
ProtectionLevel можна задати на різних рівнях області дії. Існує ієрархія, пов'язана з областю дії, яка розглядається в наступному розділі.
При завданні ProtectionLevel на самому верхньому API задається рівень для всіх рівнів нижче даного. Якщо для ProtectionLevel задається інше значення на більш низькому рівні, все інтерфейси API, розташовані нижче цього рівня в ієрархії, скидаються на цей новий рівень (проте інтерфейси API, розташовані вище цього рівня, залишаються під впливом самого верхнього рівня). Ієрархія має представлений нижче вид. Атрибути на одному і тому ж рівні є одноранговими.