为什么在某些情况下WCF SoapFault响应会被加密?

csg*_*csg 8 wcf web-services soapfault

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

ProtectionLevel = ProtectionLevel.Sign
Run Code Online (Sandbox Code Playgroud)

这没问题.

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

  • 与申请有关
  • 与WS-Addressing相关(例如缺少MessageID)

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

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

Luu*_*uuk 0

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

如果您选择启用安全性的绑定,并且未在合同的任何位置设置 ProtectionLevel 属性,则所有应用程序数据都将被加密和签名。

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