WebService如何抛出干净的异常

转载:http://www.cnblogs.com/ahdung/p/3953431.html

说明:【干净】指的是客户端在捕获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

时间: 2024-10-17 09:42:49

WebService如何抛出干净的异常的相关文章

mongodb-在使用spring-mongo DB时, 时不时就抛出MongoException$Network异常

问题描述 在使用spring-mongo DB时, 时不时就抛出MongoException$Network异常 在使用spring-mongo DB时, 时不时就抛出如下异常: nested exception is com.mongodb.MongoException$Network: Read operation to server /172.20.35.22:27017 failed on database. 求解答!多谢了. 解决方案 http://www.cnblogs.com/li

java-为什么当输入空格或者是直接按enter键的时候会抛出数组越界异常

问题描述 为什么当输入空格或者是直接按enter键的时候会抛出数组越界异常 public static void main(String[] args) throws IOException { int i=1; while(i!=0){ System.out.println("请输入用户名和密码,以分号分隔:"); Scanner sn=new Scanner(System.in); String userPWD=sn.nextLine(); if(userPWD!=null||!&

openfire插件开发时抛出字符转换异常houghtworks.qdox.

问题描述 openfire插件开发时抛出字符转换异常houghtworks.qdox. 类中已经没有中文字符了 还是抛出这个异常,求指导 感谢!!

在java中,下面画横线抛出的异常必须一样吗?谢谢!,,,,,

问题描述 在java中,下面画横线抛出的异常必须一样吗?谢谢!,,,,, 解决方案 不需要,throws 后面抛出整个方法中所有可能出现的异常(抛出的是异常类),而throw new Exception抛出特定异常(抛出的是异常对象), 解决方案二: 看情况.完全的解释是,Exception 异常,是所有异常的父类,所有异常都继承于它,所以上面throws 关键字捕获的异常如果写成Exception,那么不管方法里抛出任何种类的异常,都能捕获到,而不需要再捕获特定类型的异常.而如果throws关

jsp 不能抛出checked异常时 处理方法

因此必须预先处理异常,另外,可以将异常转换为运行时异常,或者绕过它而不处理它.但是,应该这样做吗,这其中是否隐藏着错误? 问题 只要看一个例子,问题就清楚了.假设有一个File对象的List,需要按它们的标准路径以字典顺序排序.所谓标准路径,是指在解析别名.符号链接和/../及/./之后得到的完整绝对路径.本地方法使用一个比较器,如清单1所示: 1.清单1.按标准路径比较两个文件 2.importjava.io.File; 3.importjava.io.IOException; 4.impor

浅析在C#里面抛出SAP里面自定义的异常信息

首先运行"SE37"在Exceptions页面增加异常信息,Exception为异常信息的代码,Short Text则为异常信息的详细文本,如图: C#里面如果需要抛出用户自定义的异常,那么使用RfcAbapException即可,这个Exception是专门用来获取用户自定义的异常的. 1 public void GetAllInfo(RfcDestination prd) 2 { 3 RfcRepository repo = prd.Repository; 4 IRfcFuncti

添加引用方式抛出和捕获干净的WebService异常

转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message就是WS方法中抛出的异常消息,不含任何"杂质". 前提:你对WS有编写权.就是说如果你调的是别人写的WS,那么也许只能通过字符串处理的方式才能得到干净的ex.Message.   先看示例: - WS方法: /// <summary> /// 测试WS抛异常 /// </

java-Java异常的抛出问题。

问题描述 Java异常的抛出问题. 做一个计算器.ArithmeticException属于运行时异常.5.最佳解决方案对于运行时异常,我们不要用try...catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异常,一旦发现该异常,正确的做法就会改进程序设计的代码和实现方式,修改程序中的错误,从而避免这种异常.捕获并处理运行时异常是好的解决办法,因为可以通过改进代码实现来避免该种异常的发生. 他明明说了,我们不要用try...catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异

SRVE0068E: 未捕获到 servlet CXFServlet 的其中一个服务方法中抛出的异常。抛出的异常:java.lang.IncompatibleClassChangeError

问题描述 RT.[08-10-2516:37:40:421CST]00000030ServletWrappeESRVE0068E:未捕获到servletCXFServlet的其中一个服务方法中抛出的异常.抛出的异常:java.lang.IncompatibleClassChangeErroratorg.apache.cxf.wsdl11.ServiceWSDLBuilder.addExtensibiltyElements(ServiceWSDLBuilder.java:227)atorg.apa