既然我们已经了解了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;
推荐阅读
- 2 Web服务中的异常处理
- 12123登录异常怎么回事 12123服务异常登录失败
- Win2K Internet服务器安全构建指南之三
- 请检查DNT.config中的DbType节点数据库类型是否正确例如:SqlServer的访问MYSQL
- mysql如何开启远程连接 mysql如何开启远程连接服务器
- Mysql怎么开启远程连接 mysql怎么开启远程连接服务
- win2003服务器修改远程登陆端口方法
- 如何配置一台Linux操作系统时间服务器
- 访问规则和服务发布规则的区别 v1.1
- 关于服务发布中请求转发选项的说明
