文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃软件资讯 → Web服务中的异常处理(3)

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

时间:2004/10/7 18:12:00来源:本站整理作者:蓝点我要评论(0)

 既然我们已经了解了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元素,你会发现它与下面内容有点类似。

  
  
 

相关视频

    没有数据

相关阅读 Mac和Windows哪个好 windows和mac os对比介绍Win10预览版怎么升级 Win10预览版升级方法厂商不再预装Win7或8.1系统,驱动人生帮您快速升级Mac移动硬盘安装win8 Mac将win装在移动硬盘使用教程windows10xboxone串流简单教程Windows Hello怎么用 Windows Hello使用设置教程win10怎么关闭自动更新 win10如何关闭自动更新Mac系统如何远程桌面到Windows系统

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信支付漏洞会造成哪360快剪辑怎么使用 36 酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗贝贝特卖怎么样 贝贝特卖好不好

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载安卓android 系统支持什么视频格式