zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    19.模块化
    20.ES7新特性
    22.ES9
    21.ES8新特性
    RabbitMQ:排他性队列(Exclusive Queue)
    为什么要使用消息队列
    收集RabbitMQ的用户
    身份管理提供商:Gigya和PingIdentity
    HTTP协议原理(详细)
    转:Linux下高并发socket最大连接数所受的各种限制
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433949.html
Copyright © 2011-2022 走看看