为什么在某些情况下对 WCF SoapFault 响应进行加密



我正在创建一个WCF Web服务,其请求/响应应该只签名。为此,在服务合同属性上,我设置了

ProtectionLevel = ProtectionLevel.Sign

这工作正常。

由于需求,一些 SoapFaults 应该从服务中抛出;两种类型的 SoapFaults:

  • 与应用相关
  • 与 WS 寻址相关(例如,缺少消息 ID)

为此,我使用处理SoafFaults的常规方法:创建一个IErrorHandler,其中使用MessageFault.CreateFault创建一个消息实例。

几乎所有返回的 SoapFaults 都没有加密(这对我来说没关系),我的问题是为什么带有 action="http://www.w3.org/2005/08/addressing/fault" 或"http://www.w3.org/2005/08/addressing/soap/fault"的那些是加密的?

查看 http://msdn.microsoft.com/en-us/library/aa347791.aspx 和 http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute.aspx。它指出

如果选择启用安全性的绑定,并且未设置 保护级别属性在合同上的任何地方,所有应用程序 数据将被加密和签名。

我猜默认情况下内置类型使用这种行为。您可以通过查看实际引发的异常来验证这一点。

最新更新