为什么Enterprise Library不会在WCF中抛出FaultException

时间:2012-01-20 14:06:23

标签: wcf exception-handling enterprise-library enterprise-library-5 wcf-faults

我使用IIS上托管的WCF服务 此外,我使用故障合同向客户端发送错误( FaultException<'T>
在客户端,我捕获 FaultException<'T> 以向用户显示一些错误。
如果在服务器上抛出一些未处理的异常,WCF会生成纯 FaultException , 所以客户端捕获它并显示用户“内部服务器错误”消息。

然后我开始使用Enterprise Library 5.0进行WCF异常屏蔽,并遇到了以下问题。使用 FaultContractExceptionHandler 可以将所有错误传递给客户端,但是在未处理的异常情况下,客户端会收到 CommunicationException 而不是 FaultException 。其他一切都可以。

如果我关闭了异常处理政策(删除了ExceptionShielding attibute),客户端会按预期捕获 FaultExceptions
你知道原因可能是什么吗? 感谢。

PS:这是一系列内部例外:
CommunicationException - > WebException - > IOException - > SocketException
消息是“基础连接已关闭:服务器已关闭预期保持活动状态的连接。”

的Web.config

<add name="ServiceException Policy">
    <exceptionTypes>
      <add name="ServiceLogicException" type="LopService.Contracts.ServiceLogicException, LopService.Contracts, Version=1.0.0.1725, Culture=neutral, PublicKeyToken=null"
        postHandlingAction="ThrowNewException">
        <exceptionHandlers>
          <add type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            faultContractType="LopService.Contracts.ServiceLogicFaultContract, LopService.Contracts, Version=1.0.0.1725, Culture=neutral, PublicKeyToken=null"
            name="Fault Contract Exception Handler" />
        </exceptionHandlers>
      </add>
    </exceptionTypes>
  </add>

服务类

[ExceptionShielding("ServiceException Policy")]
public partial class LopSoapService
{...

运营合同

    [OperationContract]
    [FaultContract(typeof(DataValidationFaultContract))]
    [FaultContract(typeof(ServiceLogicFaultContract))]
    int CreateUser(UserDto userDto, IEnumerable<ClaimRecordDto> claimRecords);

1 个答案:

答案 0 :(得分:0)

这似乎是Enterprise Library的一个问题。请参阅此workitem