我使用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);