既然我們已經(jīng)了解了AddCategories方法 , 現(xiàn)在就讓我們來看看AddCategories方法所用到的助手方法 。首先 , 我們看看ValidateXml方法 。像前面所提到的那樣 , 該方法負責確保被添加的CategoriesXML數(shù)據(jù)遵從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數(shù)據(jù)傳遞給構造函數(shù) , 創(chuàng)建一個XmlValidatingReader類實例 。然后 , 把Categories.xsd添加到XmlValidatingReader對象的Schemas集合中 。接著 , 設置ValidationType為ValidationType.Schema , 表明我們是在根據(jù)XML模式來驗證XML數(shù)據(jù) 。當你在使用XmlValidatingReader類驗證XML數(shù)據(jù)時 , 你必須創(chuàng)建一個事件處理對象 , 并把它與ValidationEventHandler事件相關聯(lián) 。一旦做完這些后 , 校驗錯誤和警告就通過這個回調事件處理對象被報告出來 。ValidationEventHandler具有一個ValidationEventArgs類型的參數(shù) 。ValidationEventArgs類提供兩個重要屬性 , Message和Serverity 。這兩個屬性提供更多的有關于校驗錯誤的信息 。
在這種情況下 , 我們把ValidationEventHandler事件與ValidationHandler方法相關聯(lián) 。在這個方法中 , 我們附加錯誤信息到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節(jié)點數(shù)據(jù)庫類型是否正確例如:SqlServer的訪問MYSQL
- mysql如何開啟遠程連接 mysql如何開啟遠程連接服務器
- Mysql怎么開啟遠程連接 mysql怎么開啟遠程連接服務
- win2003服務器修改遠程登陸端口方法
- 如何配置一臺Linux操作系統(tǒng)時間服務器
- 訪問規(guī)則和服務發(fā)布規(guī)則的區(qū)別 v1.1
- 關于服務發(fā)布中請求轉發(fā)選項的說明
