1

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

然后我开始使用 Enterprise Library 5.0 for WCF Exception Shielding,遇到了以下问题。使用FaultContractExceptionHandler可以将所有错误传递给客户端,但如果出现未处理的异常,客户端会收到CommunicationException而不是FaultException。其他一切正常。

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

PS:这是一个内部异常链:
CommunicationException -> WebException -> IOException -> SocketException
消息是“底层连接已关闭:预期保持活动的连接已被服务器关闭。”

网页配置

<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);
4

1 回答 1

0

这似乎是企业库的问题。请参阅此工作项

于 2012-01-21T05:16:42.897 回答