在ASP.NET中使用SOAP Extensions捕获WebService异常

原文:在ASP.NET中使用SOAP Extensions捕获WebService异常

Application_Error不能捕获的异常

      [WebMethod]
        public string HelloWorld()
        {
            throw new Exception("this exption can‘t be handled by Application_Error Method");
            return "Hello World";
        }
定义Application_Error将不能捕获这个异常.
原因需要了解一下SOAP请求的在ASP.NET的生命周期.
   

Process Message过程调用WebMethod时如果产生SoapException,SoapHeaderException 被序列化后,返回在SOAP <Fault>结点.

使用SOAP extension扩展处理Process Message过程产生的异常
我们可以SOAP Extension处理

Codepublic class SoapExceptionHandler : System.Web.Services.Protocols.SoapExtension    {        public override void ProcessMessage(System.Web.Services.Protocols.SoapMessage message)        {            if (message.Stage == SoapMessageStage.AfterSerialize)            {                if (message.Exception != null)                {                    LogUtil.Log.Error(message.Exception.InnerException);                }            }        }

        public override object GetInitializer(Type serviceType)        {            return null;        }

        public override object GetInitializer(            LogicalMethodInfo methodInfo,            SoapExtensionAttribute attribute)        {            return null;        }

        public override void Initialize(object initializer)         {        }    }
在Web.config system.web结点中配置
Code        <webServices>            <soapExtensionTypes>                <add type="Elplan.App.SoapExceptionHandler, Elplan.App" priority="1" group="High" />            </soapExtensionTypes>        </webServices>

调试:

如果使用VS直接运行调试asmx,是不可以的.(因为...它不是一个完整的SOAP请求.)可使用WebServiceStudio.
相关地址:http://www.codeplex.com/WebserviceStudio

参考文章:

Using SOAP Extensions in ASP.NET
Handling and Throwing Exceptions in XML Web Services
How to create a global exception handler for a Web Service

时间: 2024-12-13 10:18:34

在ASP.NET中使用SOAP Extensions捕获WebService异常的相关文章

编写高质量代码改善C#程序的157个建议——建议65:总是处理未捕获的异常

建议65:总是处理未捕获的异常 处理为捕获的异常是每个应用程序具备的基本功能,C#在APPDomain提供了UnhandledException事件来接收未捕获到的异常的通知.常见的应用如下: static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } s

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编

ASP.NET—015:ASP.NET中无刷新页面实现

原文作者:杨友山 原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/39679823 前面也说过在asp.net中前后前交互的问题.使用了ajax.js的方法:$.post和$.ajax. http://blog.csdn.net/yysyangyangyangshan/article/details/22755007和http://blog.csdn.net/yysyangyangyangshan/article/det

asp.net中web.config配置节点大全详解【转】

web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web.config文件或者web.config文件中不存在该结点名,则查找它的上级目录,直到网站的根目录. (3)如果网站根目录下不存在web.config文件或者web.config文件中不存在该节点名则在%windir%"Microsoft.NET"Framework"v2.0.

asp.net中当服务器出错时显示指定的错误页面

http://blog.csdn.net/helloxiaoyu/article/details/2943537 此篇文章描述了当异常再ASP.NET中发生时怎样使用C#.NET代码去拦截和相应异常.ASP.NET在异常处理方面比传统的ASP更优越.在ASP.NET中,允许在应用程序的各个层面中处理异常.ASP.NET的新特性ASP.NET为捕获并处理异常提供了更多的便利.在传统的ASP程序中,我们用“On Error Resume Next”(或Jscript的Try-catch)来处理异常.

ASP.NET中JSON的序列化和反序列化

ASP.NET中JSON的序列化和反序列化 JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理.     一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是

asp.net 中的错误机制

转自:http://www.cnblogs.com/freshman0216/archive/2008/06/14/1218721.html 对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制.当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行跟踪处理:二是以友好的方式提示最终用户页面发生了错误,而不能将未处理的错误信息显示给用户.      让我们想想,ASP.NET为我们提供了几种错误处理机制?

Asp.net中JQuery、ajax调用后台方法总结

通过上一篇文章实例的实现,整个过程当中学习到很多知识点,了解了Jquery.Ajax在asp.net中的运用,加以总结,其实原理都是一样的,理解了一种,其他的注意很少的区别就可以了.灵活运用: 1.有参数的方法调用 示例代码如下:前台jQuery代码:$(function() {  知道的一种就是ajax调后台的方法. 1.有参数的方法调用 示例代码如下: 前台jQuery代码: [plain] view plaincopyprint? <span style="font-size:18p

asp.net中打开新窗口的多种方法(转载)

asp.net中打开新窗口的多种方法 1.Response.Redirect("XXX.aspx",true)——直接转向新的页面,原窗口被代替; 2. Response.Write("<script>window.open(XXX.aspx'',''_blank'')</script>")——原窗口保留,另外新增一个新页面; 3.Response.Write("<script>window.location=XXX.a