• C#(99):WCF错误处理


    介绍

    WCF(Windows Communication Foundation) -异常处理:一般Exception的处理,FaultException和FaultException<T>的抛出和处理,使用IErrorHandler处理异常。

    下面介绍第三种异常:FaultException<T>的抛出和处理

    一、强类型化一个SOP错误类,传递需要用[DataContract]

    /// <summary>
    /// 错误信息实体类(用于错误契约FaultContract)
    /// </summary>
    [DataContract]
    public class FaultMessage
    {
        /// <summary>
        /// 错误信息
        /// </summary>
        [DataMember]
        public string Message { get; set; }
    
        /// <summary>
        /// 错误代码
        /// </summary>
        [DataMember]
        public int ErrorCode { get; set; }
    }

    二、在操作协定中用[FaultContract]错误协定指定错误类型

    [ServiceContract]
    public interface IHello
    {
        [OperationContract]
        [FaultContract(typeof(FaultMessage))]
        void HelloFaultExceptionGeneric();
    }

    三、在实现代码中,定义一个方法,可以抛出一个FaultException<FaultMessage>的异常

    /// <summary>
    /// Hello类
    /// </summary>
    public class Hello : IHello
    {
        /// <summary>
        /// 抛出FaultException<T>异常
        /// </summary>
        public void HelloFaultExceptionGeneric()
        {
            throw new FaultException<FaultMessage>(new FaultMessage { Message = "抛出FaultException<T>异常", ErrorCode = -1 }, "为了测试FaultException<T>用的");
        }
    }

    四、在客户端中,可以捕获FaultException<FaultMessage>的异常。FaultMessage用Detail属性访问。

    protected void btnHelloFaultExceptionGeneric_Click(object sender, EventArgs e)
    {
        ExceptionService.HelloClient proxy = new ExceptionService.HelloClient();
        try
        {
            proxy.HelloFaultExceptionGeneric();
        }
        catch (System.ServiceModel.FaultException<ExceptionService.FaultMessage> ex)
        {
            lblMsg.Text = string.Format("错误代码:{0};错误信息:{1};错误原因:{2}",
                ex.Detail.ErrorCode.ToString(),
                ex.Detail.Message,
                ex.Reason.ToString());
        }
        finally
        {
            proxy.Close();
        }
    }
  • 相关阅读:
    vue生命周期过程做了什么
    css_css3_实用属性_随时补充更新
    echarts的symbol引用本地图片写法
    无废话设计模式(1)--简单工厂、工厂方法、抽象工厂
    JavaWeb--Maven学习
    SpringCloud Alibaba实战 -引入服务网关Gateway
    从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 抽象的队列式同步器
    架构的搭建(一)SpringCloud Alibaba
    配置中心之Nacos简介,使用及Go简单集成
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433949.html
Copyright © 2020-2023  润新知