Почему ответы WCF SoapFault зашифрованы в некоторых ситуациях?

Я создаю веб-сервис WCF, чьи запросы / ответы должны быть подписаны только. Для этого в атрибуте ServiceContract я установил

ProtectionLevel = ProtectionLevel.Sign

Это работает хорошо.

Из-за требований некоторые SoapFaults должны быть выброшены из сервиса; два типа SoapFaults:

  • связанные с применением
  • связанные с WS-адресацией (например, отсутствует MessageID)

Для этого я использую обычный подход к работе с SoafFaults: создайте IErrorHandler, в котором экземпляр Message создается с помощью MessageFault.CreateFault.

Почти все возвращенные SoapFaults не зашифрованы (это нормально для меня), мой вопрос, почему те с action="http://www.w3.org/2005/08/addressing/fault" или " http://www.w3.org/2005/08/addressing/soap/fault"зашифрованы?

1 ответ

Ознакомьтесь с http://msdn.microsoft.com/en-us/library/aa347791.aspx и http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx. Это заявляет, что

Если вы выберете привязку, которая включает защиту, и не указали свойство ProtectionLevel где-либо в контракте, все данные приложения будут зашифрованы и подписаны.

Я предполагаю, что типы сборки по умолчанию используют это поведение. Вы можете убедиться в этом, посмотрев, какое исключение на самом деле выдается.

Другие вопросы по тегам