zoukankan      html  css  js  c++  java
  • 在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的生命周期.
    cc164007.fig02(en-us)   

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

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

    Code
    public 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

  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/solo/p/1445439.html
Copyright © 2011-2022 走看看