• 热门专题

C#浅谈如何抛出和捕获干净的WebService异常

作者:ahdung  发布日期:2014-09-03 21:13:08
  • 说明:【干净】指的是客户端在捕获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,需要经过一定加工才行。

    刚刚说的是穴ky"http://www.it165.net/qq/" target="_blank" class="keylink">qq+99au0rujrMTHvs3Kx8u1vLSx41dTxde1xMrHU29hcEV4Y2VwdGlvbqOs0rLT0L/JxNy1w7W9sru4yb67tcRleC5NZXNzYWdlo6zI5828o7o8L3A+CjxwPjxpbWcgc3JjPQ=="http://www.it165.net/uploadfile/files/2014/0903/2014090319181957.png" alt="" />

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

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

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

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

    -文毕-

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规