2011-11-17 41 views
2

我有一个使用企业库进行异常处理和WCF验证集成的WCF服务。他们似乎并不一起工作。WCF和企业库 - 异常屏蔽和验证应用程序块

我要的是:

  1. 如果我的服务引发任何异常,WCF异常屏蔽将抓住这一点,并抛出一个FaultException<MyServiceFault>
  2. 如果传入的消息未通过验证,则该服务应继续丢弃FaultException<ValidationFault>

但是,我不知道如何告诉异常屏蔽策略让验证例外通过。

我有一些企业库配置,将每个异常变成FaultException<MyServiceFault>。如果我得到EnterpriseLibrary登录它捕获的异常,它说,它得到

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

验证失败时

。但是,如果将此例外情况添加到配置中作为新的<exceptionType>,postHandlingActionNone,那么在验证失败时仍然会抛出FaultException<MyServiceFault>

是否有可能使用WCF异常屏蔽来捕获除WCF验证异常以外的每个异常?如果没有,我将不得不为所有可能抛出的异常添加更多配置 - 在这种情况下,异常屏蔽的意义何在?

回答

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>

0

库中存在一个会阻止您提供的解决方案运行的错误。解决方法是不要更改例外屏蔽块的默认策略名称。

Refer to this link to add vote to this bug.

+0

虽然这是事实,具有比“WCF异常屏蔽”以外的任何将导致这一切失败,I *正在使用此策略的名称*。我的答案中的配置确实有效! –