我正在创建一个WCF Web服务,其请求/响应应该只签名.
为此,在我设置的ServiceContract属性上
为此,在我设置的ServiceContract属性上
ProtectionLevel = ProtectionLevel.Sign
这没问题.
由于要求,一些SoapFaults应该从服务中抛出;两种类型的SoapFaults:
>与申请有关
>与WS-Addressing相关(例如缺少MessageID)
为此,我使用处理SoafFaults的常规方法:创建一个IErrorHandler,其中使用MessageFault.CreateFault创建Message实例.
几乎所有返回的SoapFault都没有加密(这对我来说没问题),
我的问题是为什么行动=“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.
它说明了这一点
它说明了这一点
If you select a binding that enables security and you do not set the
ProtectionLevel property anywhere on the contract,all application
data will be encrypted and signed.
我猜默认情况下的内置类型使用此行为.您可以通过查看实际抛出的异常来验证这一点.