• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Web服務中的異常處理(3)

    發表于:2007-05-25來源:作者:點擊數: 標簽:
    既然我們已經了解了AddCategories方法,現在就讓我們來看看AddCategories方法所用到的助手方法。首先,我們看看ValidateXml方法。像前面所提到的那樣,該方法負責確保被添加的CategoriesXML數據遵從Categories.xsd中所預先定義好的XML模式。 privateboolVali

    既然我們已經了解了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)

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>