为啥在某些情况下会加密 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 响应?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 AudioFlinger 在没有编程指示的情况下会失败?
为啥在这种情况下会生成不同的 go-assembler 代码?