我有一个WCF服务,它使用Enterprise Library进行异常处理和WCF验证集成。他们似乎没有合作。
我想要的是:
FaultException<MyServiceFault>
。FaultException<ValidationFault>
。但是,我不知道如何告诉异常屏蔽策略让验证异常通过。
我有一些Enterprise Library配置,可以将每个例外转换为FaultException<MyServiceFault>
。如果我让EnterpriseLibrary记录它捕获的异常,它会说它得到了
验证失败时Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException
但是,如果将此异常作为<exceptionType>
postHandlingAction
None
的新FaultException<MyServiceFault>
添加到配置中,则在验证失败时仍然会抛出{{1}}。
是否可以使用WCF异常屏蔽来捕获除WCF验证异常之外的每个异常?如果没有,我将不得不为可能抛出的所有不同异常添加更多的配置 - 在这种情况下异常屏蔽的重点是什么?
答案 0 :(得分:0)
<add name="WCF Exception Shielding">
<exceptionTypes>
<add name="FaultException`1" type="System.ServiceModel.FaultException`1[[Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationFault, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow" />
<add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="ThrowNewException">
<exceptionHandlers>
<add type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
faultContractType="MyServiceFault, MyServices"
name="Fault Contract Exception Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
在服务代码中抛出任何异常,它被抛出为FaultException<MyServiceFault>
,除非WCF验证应用程序块抛出异常,然后一切正常,客户端收到FaultException<ValidationFault>
。
答案 1 :(得分:0)
库中存在一个错误,可能会阻止您提供的解决方案正常运行。解决方法是不更改异常屏蔽块的默认策略名称。