• WCF异常传播


    • 传送至客户端的异常肯定是CommunitionException类型,包括一般的通信过程中出错而引发的CommunicationException类型,System.IdentityModel.Selectors.UserNamePasswordValidator扩展能抛出的System.ServiceModel.Security.MessageSecurityException,还有一般业务能够引发的FaultException(包括FaultException<TExceptionDetail>)
    • 若服务端抛出的不是FaultException类型的异常,那异常被格式化成FaultException<TExceptionDetail>(以传递给客户端)时其详细信息是否会被被塞到ExceptionDetail中取决于"IncludeExceptionDetailInFaults"设置
    • 若服务端抛出的是FaultException<TExceptionDetail>异常,则还需要在契约上使用FaultContract标识TExceptionDetail以便客户端接收到后能够正确识别(反序列化),除非TExceptionDetail就是ExceptionDetail类型(也不能是其子类)
    • 默认服务端或客户端(回调)若抛出非FaultException,通道会进入出错状态而无法继续使用
      • 可通过自定义IErrorHandler扩展改变这种方式,但要注意的是:在扩展实现中,应该在IErrorHandler.ProvideFault的实现中为fault引用参数构建异常消息实例,因为如果用于客户端(回调),那异常是“非FaultException”的情况下,无法再通过IErrorHandler.HandleError决定通道是否进入出错状态。
      • 也可通过将服务方法(服务端)或回调方法(客户端)设为单向以避免通道出错。
  • 相关阅读:
    一个粗心造成的死循环
    LinearGradientBrush使用
    一个需求引发的关于平板电脑的思考
    开发照片采集系统中的问题总结
    List<T>的Add方法等
    开发相机拍照组件中需要解决的问题,一月回顾
    ShowDialog使用
    使用ActiveSyn,让WINMBILE的PDA连接WIN2003的杂牌蓝牙
    Jenkins安装教程
    Jmeter连接数据库
  • 原文地址:https://www.cnblogs.com/beta2013/p/3484810.html
Copyright © 2020-2023  润新知