WebService开发中SoapException的用法

在ASP.NET Web service开发中,会用到一个很重要的类型:SoapException,它是一个基于Soap请求机制的异常处理类型, 这也是一个很重要的类型,在编写web service函数时,我们需要用它来抛出异常信息,以便供客户端获取并进行必要的异常处理. 我们可以在它的detail属性里加入自定义的详细的错误信息。

这里有两种写法,

第一种, 就是网上流转某大虾写的,用一个String变量任意拼构一个XML字符串,然后用XmlDocument load XML字符串,再将DocumentElement转入到SoapException中构造函数中:

       string strXmlOut = @"<detail>" //注意,一定要用小写的detail节点!
                         
+ "<Error>"
                         
+ "<ErrorNumber>" + errorNumber + "</ErrorNumber>"
                         
+ "<ErrorMessage>" + errorMessage + "</ErrorMessage>"
                         
+ "<ErrorSource>" + errorSource + "</ErrorSource>"
                         
+ "</Error>"
                         
+ "</detail>";

        
//装载为Xml文档
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(strXmlOut);

        
//实例化SoapException
        SoapException soapEx = new SoapException(errorMessage, faultCodeLocation, uri, xmlDoc.DocumentElement);

        throw soapEx;

 

第二种,就是MSDN里介绍的正规写法:

XmlDocument doc = new XmlDocument();
            XmlNode node = doc.CreateNode(XmlNodeType.Element,
                SoapException.DetailElementName.Name,
                SoapException.DetailElementName.Namespace);

 

XmlNode xmlErrorNumber= doc.CreateNode(XmlNodeType.Element, "ErrorNumber", "http://tempuri.org/");
            xmlErrorNumber
.InnerText = exceptionInfo.ErrorCode; //exceptionInfo是一个自定义类型 

            node.AppendChild(xmlErrorNumber);

XmlNode xmlErrorMessage= doc.CreateNode(XmlNodeType.Element, "ErrorMessage", "http://tempuri.org/");
            xmlErrorNumber
.InnerText = exceptionInfo.StackTrace; 

            node.AppendChild(xmlErrorMessage);  

            SoapException soapEx = new SoapException(exceptionInfo.ErrorMessage, faultCodeLocation, uri, node);

            throw soapEx; 

 

参考:http://www.techmango.com/blog/article/DotNet/ASP_NET_SoapExtension_SoapException.htm

posted @ 2010-11-24 21:35  平常心成大事  阅读(798)  评论(0编辑  收藏  举报