【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中的configuration\system.web\customErrors节点的mode属性设为“On”或“RemoteOnly”即可。如图:

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

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

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

-文毕-

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

Java核心(三)并发中的线程同步与锁

乐观锁、悲观锁、公平锁、自旋锁、偏向锁、轻量级锁、重量级锁、锁膨胀...难理解?不存的!来,话不多说,带你飙车。

1212
来自专栏Java帮帮-微信公众号-技术文章全总结

SpringMVC框架复习大纲【面试+提高】

2264
来自专栏Java成长之路

线程安全

当一个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他协调操作,调用这个对象的行为都可...

1623
来自专栏大魏分享(微信公众号:david-share)

实战:应用对持久数据访问| 从开发角度看应用架构9

JPA的API有主要以下几个:实体(entity)、持久性单元(persistence units)、持久性上下文( persistence context)、...

993
来自专栏王清培的专栏

.NET应用程序调试—原理、工具、方法

阅读目录: 1.背景介绍 2.基本原理(Windows调试工具箱、.NET调试扩展SOS.DLL、SOSEX.DLL) 2.1.Windows调试工具箱 ...

2286
来自专栏Seebug漏洞平台

Spring MVC 目录穿越漏洞(CVE-2018-1271)分析

2018年04月05日,Pivotal公布了Spring MVC存在一个目录穿越漏洞(CVE-2018-1271)。Spring Framework版本5.0到...

3432
来自专栏王清培的专栏

.NET应用程序调试—原理、工具、方法

随着应用程序的复杂度不断上升,要想将好的设计思想稳定的落实到线上,我们需要具备解决问题的能力。需要具备对运行时的错误进行定位且快速的解决它的能力。本篇文章我将分...

1290
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb13-设计模式案例实现(Java真正的全栈开发)

? JavaWeb设计模式&案例 一.JavaWeb的设计模式 1. jsp模式介绍 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一...

3186
来自专栏Linux驱动

第3阶段——内核启动分析之start_kernel初始化函数(5)

内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只...

30210
来自专栏猛牛哥的博客

快手(AAU)更新记录v2.9.1.23

1887

扫码关注云+社区

领取腾讯云代金券