添加引用方式抛出和捕获干净的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:17

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

java中重写方法必须抛出和原方法一样的异常或者不抛异常

class A {     public void method throws IOException(){} } // 错误 class B {     public void method throws FileNotFoundException(){} } // 错误 class C {     public void method throws Exception(){} } // 错误 class D {     public void method throws IOExceptio

如何更合理的利用Java中的异常抛出

以前,我觉得编程语言中最让人不解的部分就是它能够创建错误.当时我对Java语言中的throw关键字的第一反应就是"啊,这也太傻了,为什么我们想要引发一个错误(error)?"我觉得错误是我的敌人,应当避免的,所以创建错误是毫无用处甚至是危险的.我认为在JavaScript中加入这样的关键字是多此一举.但随着我编程经验的丰富,我逐渐变成了throw我的error粉丝.合理的使用它们会让对代码的调试和维护大大简化. 在编程的时候,Error通常出现在不期望的事情发生时.可能是传入函数的参数

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

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

c#-aspnet 抛出文件不能访问异常

问题描述 aspnet 抛出文件不能访问异常 我的asp.net 应用程序,开始先部署到远程的测试服务器,一切正常,但是当我发布到产品服务器的时候,抛出了文件不能访问的异常,弄了很长时间,仍然不能解决,谁能帮助我? The process cannot access the file 'xxx.pdf' because it is being used by another process 这个PDF是程序自己生成的临时文件,不可能有其它程序使用,有很多帖子说是文件流没有关闭,如果没关闭,为什么

WebService如何抛出干净的异常

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

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

使用richface4,如何捕获后台抛出的异常?

问题描述 我最近想做一个项目,用的是richface4+jsf2我不知道如何捕获后台抛出的异常,并且展示在页面上比如使用a4j:jsfunction调用action中的test();方法这个test()方法throw一个exception做测试页面如何用js捕获并且alert出来?我查了有一个A4J.AJAX.OnErrer,但是一直报A4J未定义,求解答~

捕获Java线程池执行任务抛出的异常

捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { public abstract void run(); } 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了? 通常java.lang.Thread对象运行设置一个默认的异常处理方法: java.lang.Thread.setDefaultUncaughtExceptionH

求问如何捕获async方法中抛出的异常?

问题描述 privateasyncvoidbutton1_Click(objectsender,EventArgse){try{awaitDoSomethingAsync();}catch(Exceptionex){MessageBox.Show(ex.Message);}}privateasyncTaskDoSomethingAsync(){awaitTask.Run(()=>{Thread.Sleep(3000);thrownewException("Test");});}