Web服务中的异常处理(3)


既然我们已经了解了AddCategories方法,现在就让我们来看看AddCategories方法所用到的助手方法。首先,我们看看ValidateXml方法。像前面所提到的那样,该方法负责确保被添加的CategoriesXML数据遵从Categories.xsd中所预先定义好的XML模式。

privateboolValidateXml(stringxml)

{

boolvalidXml=false;

//LoadtheXMLdataintomemory

XmlValidatingReadervalReader=new

XmlValidatingReader(xml,XmlNodeType.Document,null); 数据挖掘论坛

valReader.Schemas.Add(null,Server.MapPath("Categories.xsd"));

valReader.ValidationType=ValidationType.Schema;

valReader.ValidationEventHandler+=new

ValidationEventHandler(ValidationHandler);

//LoopthroughtheXMLfile

while(valReader.Read())

{}

if(builder.Length>0)

validXml=false;

else

validXml=true;

valReader.Close();

returnvalidXml;

}
以上代码首先把被添加的XML数据传递给构造函数,创建一个XmlValidatingReader类实例。然后,把Categories.xsd添加到XmlValidatingReader对象的Schemas集合中。接着,设置ValidationType为ValidationType.Schema,表明我们是在根据XML模式来验证XML数据。当你在使用XmlValidatingReader类验证XML数据时,你必须创建一个事件处理对象,并把它与ValidationEventHandler事件相关联。一旦做完这些后,校验错误和警告就通过这个回调事件处理对象被报告出来。ValidationEventHandler具有一个ValidationEventArgs类型的参数。ValidationEventArgs类提供两个重要属性,Message和Serverity。这两个属性提供更多的有关于校验错误的信息。

在这种情况下,我们把ValidationEventHandler事件与ValidationHandler方法相关联。在这个方法中,我们附加错误信息到StringBuilder对象中,而该StringBuilder对象定义在模块中。如果没有任何校验错误,那么StringBuilder对象的Length属性将返回0。我们就是使用这个来检查XML模式校验是否失败。ValidationHandler方法定义如下。

publicvoidValidationHandler(objectsender,

ValidationEventArgsargs)

{

builder.Append("Validationerror"+"
");

builder.Append("Severity:"+args.Severity+"
");

builder.Append("Message:"+args.Message+"
");

}

下面,让我们来看看RaiseException方法的代码。

publicSoapExceptionRaiseException(stringuri,

stringwebServiceNamespace,

stringerrorMessage,

stringerrorNumber,

stringerrorSource,

FaultCodecode)

{

XmlQualifiedNamefaultCodeLocation=null;

//IdentifythelocationoftheFaultCode

switch(code)

{

caseFaultCode.Client:

faultCodeLocation=SoapException.ClientFaultCode;

break;

caseFaultCode.Server:

faultCodeLocation=SoapException.ServerFaultCode;

break;

}
XmlDocumentxmlDoc=newXmlDocument();

//CreatetheDetailnode

XmlNoderootNode=xmlDoc.CreateNode(XmlNodeType.Element,

SoapException.DetailElementName.Name,

SoapException.DetailElementName.Namespace);

//BuildspecificdetailsfortheSoapException

//AddfirstchildofdetailXMLelement.

XmlNodeerrorNode=xmlDoc.CreateNode(XmlNodeType.Element,"Error",

webServiceNamespace);

//CreateandsetthevaluefortheErrorNumbernode

XmlNodeerrorNumberNode=

xmlDoc.CreateNode(XmlNodeType.Element,"ErrorNumber",

webServiceNamespace);

errorNumberNode.InnerText=errorNumber;

//CreateandsetthevaluefortheErrorMessagenode

XmlNodeerrorMessageNode=xmlDoc.CreateNode(XmlNodeType.Element,

"ErrorMessage",

webServiceNamespace);

errorMessageNode.InnerText=errorMessage;

//CreateandsetthevaluefortheErrorSourcenode

XmlNodeerrorSourceNode=

数据挖掘论坛



xmlDoc.CreateNode(XmlNodeType.Element,"ErrorSource",

webServiceNamespace);

errorSourceNode.InnerText=errorSource;

//AppendtheErrorchildelementnodestotherootdetailnode.

errorNode.AppendChild(errorNumberNode);

errorNode.AppendChild(errorMessageNode);

errorNode.AppendChild(errorSourceNode);

//AppendtheDetailnodetotherootnode

rootNode.AppendChild(errorNode);

//Constructtheexception

SoapExceptionsoapEx=newSoapException(errorMessage,

faultCodeLocation,uri,

rootNode);

//Raisetheexceptionbacktothecaller

returnsoapEx;

}
正如其名所提示的那样,RaiseException方法用于以SoapException对象的形式抛出Web服务中的异常。上面所示代码首先检查包含在FaultCode中的枚举参数的值,而该枚举参数用来标识异常发生的源头。如果是因为服务器端的问题(例如,数据库服务器已经关闭)而发生异常,那么应该设置FaultCode的值为SoapException.ServerFaultCode。接着,RaiseException方法创建一个XmlDocument对象来保存detail元素的内容。该对象添加detail元素下的所有子元素,然后把detail节点传递给SoapException对象的构造函数。最后,方法用return语句把SoapException对象返回给调用者。如果你检查SoapException对象内部的detail元素,你会发现它与下面内容有点类似。



(出处:CSDN)
[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:内网FTP服务器架设不完全解析
下一篇:Web服务中的异常处理(1)
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • 构筑更安全的乐园
  • 国内域名解析服务器DNS分布表
  • Linux环境下基于策略的路由
  • 基于UNIX平台FTP服务器的建立
  • 调优Web站点性能完全攻略
  • Internet防火墙技术及安全策略
  • 拖动改变Table的列宽度
  • 国产FTP助手
  • 个人电脑变网站服务器全面解决方案
  • 网络安全漏洞检测
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • 调优Web站点性能完全攻略
  • IIS6.0下ASP的新增功能(五)
  • 实战J2EE开发购物网站经验篇
  • IIS6.0下ASP的新增功能(四)
  • IIS6.0下ASP的新增功能(一)
  • IIS6.0下ASP的新增功能(三)
  • 个人电脑变网站服务器全面解决方案
  • 国产FTP助手
  • TAB键的缩排处理
  • Serv
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静