2

我有一个 WCF 服务,它使用企业库进行异常处理和 WCF 验证集成。他们似乎没有一起工作。

我想要的是:

  1. 如果我的服务抛出任何类型的异常,WCF Exception Shielding 将捕获这个并抛出一个FaultException<MyServiceFault>.
  2. 如果传入的消息验证失败,服务应该继续抛出一个FaultException<ValidationFault>.

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

我有一些企业库配置,可以将每个异常转换为FaultException<MyServiceFault>. 如果我让 EnterpriseLibrary 记录它捕获的异常,它会说它得到一个

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

当验证失败时。但是,如果将此异常作为一个新的添加到配置<exceptionType>postHandlingActionNone我仍然会FaultException<MyServiceFault>在验证失败时被抛出。

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

4

2 回答 2

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>会作为FaultException<ValidationFault>.

于 2011-11-17T16:51:04.240 回答
0

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

请参阅此链接以添加对此错误的投票。

于 2011-12-26T15:09:41.277 回答