zoukankan      html  css  js  c++  java
  • WCF实现将服务器端的错误信息返回到客户端

    最近在园子里转看到有人对如题的实现有疑问,今天有时间就写了项目把实现简单的讲解一下,如果你是牛逼人物那就绕道吧,哥不想浪费你的时间,现在开始:

    默认WCF是不允许将服务器的异常信息返回到客户端的(主要是客户端不一定能够识别clr的异常信息),如果你有这方面的需求可以通过SOAP的Fault包的形式返回异常信息,首先要做的就是设置配置文件,将默认不允许返回错误信息的设置改成如下:

        <behaviors>
    <serviceBehaviors>
    <behavior name="Bhc">
    <serviceMetadata httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true"/><!--如此設置會將服務器端得錯誤返回到客戶端,實際的發佈中需要將此項目設置成false-->
    </behavior>
    </serviceBehaviors>
    </behaviors>

    然后定义承载信息的DataContract

        [DataContract]
    public class Erro
    {
    [DataMember]
    public string Message
    {
    get; set;
    }
    }

    上边的代码 就不用介绍了 就是一个数据合同

        //服務契約定義了可以遠程調用的對象和方法
    //定義服務契約
    [XmlSerializerFormat]//定義序列化的方式
    [ServiceContract(SessionMode = SessionMode.Allowed)]//SessionMode = SessionMode.Allowed:設置此屬性意味著可以使用會話Binding
    public interface IActionMain
    {
    //定義操作契約
    [DataContractFormat]//定義序列化的方式
    [OperationContract]
    string GetName(string pInc);

    [FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據
    [FaultContract(typeof(DivideByZeroException))]
    [OperationContract]
    DataCollection Return();
    }

    在方法中定义属性,这里有两种实现

    1.使用自定义的错误类型
            [FaultContract(typeof(ErroInfo.Erro))]//如果有異常就返回下面定義的數據契約的結構數據

    2.使用系统的异常类型
            [FaultContract(typeof(DivideByZeroException))]
    在契约实现类中将异常抛出

    throw new FaultException<DivideByZeroException>(new DivideByZeroException("這個是自定義的異常!"));


    到此服务器端的实现完成。

    下边看客户端的实现

    配置文件不需要特殊设置,调用函数,抓取异常,代码如下:

                try
    {
    return this.Channel.Return();
    }
    catch (FaultException<ErroInfo.Erro> exception)
    {
    throw new Exception(exception.Detail.Message);
    }
    catch(FaultException<DivideByZeroException> exception)
    {
    throw new Exception(exception.Detail.Message);
    }

    FaultException<ErroInfo.Erro> exception:这个抓取的是定义的异常类型。

    FaultException<DivideByZeroException> exception:这个抓取的是系统异常类型

    注意这里获取异常的信息的方法是exception.Detail.Message,而不是Message。

    运行效果如下:

    示例代码:Demo

    高校主页PK

    2011-12-21 09:54 by pingjiang, 2121 visits, 收藏编辑

    每一所高校都有一个主页,但是各有各的特色。

    首先我们看一下哈佛大学的2011年的主页,使用HTML5设计,内容丰富,非常人性化。从布局和内容来看也是以人为本,每个人来到这个首页都可以找到自己的入口。可以说是现代网页设计的典范。

    哈佛大学

    harvard

    下面再看看国内的几所著名的高校的网页设计。一看就知道我们的差距在哪里。

    *******不分先后 AND 不全*********

    北京航空航天大学

    buaa

    北京邮电大学

    bupt

    复旦大学

    fudan

    哈尔滨工业大学

    hit

    湖南大学

    hnu

    华中科技大学

    hust

    吉林大学

    jlu

    南京大学

    nju

    西北工业大学

    nwpu

    北京大学

    pku

    中国人民大学

    ruc

    四川大学

    scu

    东南大学

    seu

    上海交通大学

    sjtu

    中山大学

    sysu

    天津大学

    tju

    清华大学

    tsinghua

    电子科技大学

    uestc

    中国科学技术大学

    ustc

    武汉大学

    whu

    西安电子科技大学

    xidian

    西安交通大学

    xjtu

    厦门大学

    xmu

    浙江大学

    zju

    http://www.cnblogs.com/Ref-tian

  • 相关阅读:
    浅谈TCP三次握手和四次挥手
    浅谈网络七层协议
    websocket实例
    浅谈websocket
    python的垃圾回收机制
    解释型语言和编译型语言的区别
    装饰器修复技术@wraps
    Django基础知识点
    项目再Windows上没有问题,但是在Linux上运行报错OSError: [Errno 8] Exec format error:
    在Centos 7 系统上部署flask 项目 pipenv+nginx+gunicorn
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2299027.html
Copyright © 2011-2022 走看看