zoukankan      html  css  js  c++  java
  • 【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

    -文毕-

  • 相关阅读:
    sql中where和having的区别
    mysql中locate和substring函数使用
    使用jdk进行数据迁移(sqlite迁移mysql)
    mysql数值函数
    mysql字符串函数
    zabbix-2.2.2(Ubuntu 14.04 LTS/OpenLogic 7.2)
    Piwik-2.16.1 (OpenLogic CentOS7.2)
    Nagios-4.1.1 (OpenLogic CentOS 7.2)
    Bugzilla-5.0.3 (OpenLogic CentOS 7.2)
    GitLab-CE-8.9.4 (OpenLogic CentOS 7.2)
  • 原文地址:https://www.cnblogs.com/ahdung/p/3953431.html
Copyright © 2011-2022 走看看