WCF的异常处理

介绍

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

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

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

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

    /// 
    /// 错误代码
    /// 
    [DataMember]
    public int ErrorCode { get; set; }
}

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

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

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

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

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

protected void btnHelloFaultExceptionGeneric_Click(object sender, EventArgs e)
{
    ExceptionService.HelloClient proxy = new ExceptionService.HelloClient();
    try
    {
        proxy.HelloFaultExceptionGeneric();
    }
    catch (System.ServiceModel.FaultException ex)
    {
        lblMsg.Text = string.Format("错误代码:{0};错误信息:{1};错误原因:{2}",
            ex.Detail.ErrorCode.ToString(),
            ex.Detail.Message,
            ex.Reason.ToString());
    }
    finally
    {
        proxy.Close();
    }
}

到此这篇关于WCF异常处理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的