• 【C#】添加引用方式抛出和捕获干净的WebService异常


    说明:【干净】指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message就是WS方法中抛出的异常消息,不含任何“杂质”。

    前提:你对WS有编写权。就是说如果你调的是别人写的WS,那么也许只能通过字符串处理的方式才能得到干净的ex.Message。

     

    先看示例:

    - WS方法:

    /// <summary>
    /// 测试WS抛异常
    /// </summary>
    /// <param name="isSoapEx">为true就抛出SoapException,否则抛出Exception</param>
    /// <param name="errMsg">自定义异常消息</param>
    [WebMethod]
    public string Test(bool isSoapEx, string errMsg)
    {
        throw isSoapEx
            ? new SoapException(errMsg, SoapException.ServerFaultCode)
            : new Exception(errMsg);
    }

    - 客户端调用:

    可以看到,如果WS抛出的是Exception,客户端得到的ex.Message就是含有“杂质”的,所以得到干净异常消息的要诀之一就是:

    WS要抛出SoapException异常。

    这就是为什么说你要有对WS的编写权,因为别人的WS如果抛的不是SoapException,你就会得到先天含有杂质的ex.Message,需要经过一定加工才行。

    刚刚说的是要诀之一,那就是说即便WS抛的是SoapException,也有可能得到不干净的ex.Message,如图:

    这是由ASP.NET程序的【自定义错误消息】设定为“Off”引起的,把WS的web.config中的configurationsystem.webcustomErrors节点的mode属性设为“On”或“RemoteOnly”即可。如图:

    所以,总结一下,以我目前所知,要想在客户端得到干净的ex.Message,要诀有二:

    1、WS要把异常封装为SoapException再抛出

    2、WS的【自定义错误消息】不能设为Off

    -文毕-

  • 相关阅读:
    面向对象基本原则
    策略模式
    简单工厂模式
    高内聚、低耦合
    UML在代码中的展现
    使用commons-csv简单读写CSV文件
    java反射机制
    SrpingDruid数据源加密数据库密码
    markdown学习经验
    Vue.js学习笔记
  • 原文地址:https://www.cnblogs.com/ahdung/p/3953431.html
Copyright © 2020-2023  润新知