Почему ответы 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 где-либо в контракте, все данные приложения будут зашифрованы и подписаны.
Я предполагаю, что типы сборки по умолчанию используют это поведение. Вы можете убедиться в этом, посмотрев, какое исключение на самом деле выдается.