【问题标题】:Why WCF SoapFault responses are encrypted in some situations?为什么在某些情况下会加密 WCF SoapFault 响应?
【发布时间】:2012-11-27 18:42:00
【问题描述】:

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

ProtectionLevel = ProtectionLevel.Sign

没问题。

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

  • 与应用相关
  • 与 WS-Addressing 相关(例如缺少 MessageID)

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

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

【问题讨论】:

  • 你怎么知道它是加密的?你能提供一个示例回复吗?
  • 我知道它已加密,因为我使用 SvcTraceViewer(在客户端)查看它。
  • @csg 你找到原因了吗?我遇到了完全相同的问题。

标签: wcf web-services soapfault


【解决方案1】:

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

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

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

【讨论】:

  • 保护级别设置在合同级别:[ServiceContract(ProtectionLevel = ProtectionLevel.Sign)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2016-06-10
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
相关资源
最近更新 更多