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;
SoapException soapEx = new SoapException(exceptionInfo.ErrorMessage, faultCodeLocation, uri, node);
throw soapEx;
参考:http://www.techmango.com/blog/article/DotNet/ASP_NET_SoapExtension_SoapException.htm