为啥在某些情况下会加密 WCF SoapFault 响应?

Posted

技术标签:

【中文标题】为啥在某些情况下会加密 WCF SoapFault 响应?【英文标题】: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 你找到原因了吗?我遇到了完全相同的问题。 【参考方案1】:

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

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

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

【讨论】:

保护级别设置在合同级别:[ServiceContract(ProtectionLevel = ProtectionLevel.Sign)]

以上是关于为啥在某些情况下会加密 WCF SoapFault 响应?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 memset 在这种情况下会失败?

为啥 AudioFlinger 在没有编程指示的情况下会失败?

为啥在这种情况下会生成不同的 go-assembler 代码?

为啥 PyQt 在没有信息的情况下会崩溃? (退出代码 0xC0000409)

为啥 WCF 如此重要,在啥情况下使用它?

为啥服务器在非多线程的情况下会同时处理多个客户端?