亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Web服務(wù)中的異常處理(2)

 更新時(shí)間:2006年10月11日 00:00:00   作者:  

Web服務(wù)的實(shí)現(xiàn) 為了達(dá)到這個(gè)示例的目的,我們創(chuàng)建一個(gè)名為CategoriesService的Web服務(wù),選擇一個(gè)可視化的C#ASP.NETWeb服務(wù)作為項(xiàng)目的模版。一旦創(chuàng)建項(xiàng)目,我們就添加一個(gè)名為AddCategories的方法,并且給這個(gè)方法添加下列代碼:

[WebMethod]

publicboolAddCategories(stringxml)

{

try

{

using(SqlConnectionconn=newSqlConnection())

{

if(ValidateXml(xml))

{

XmlDocumentdoc=newXmlDocument();

doc.LoadXml(xml);

conn.ConnectionString=

"server=localhost;uid=sa;pwd=thiru;database=northwind";

conn.Open();

XmlNamespaceManagernsManager=new

XmlNamespaceManager(doc.NameTable);

//AddthenamespacetotheNamespaceManager

nsManager.AddNamespace("catNS",

"http://tempuri.org/CategoriesNamespace");

XmlNodecategoryNode=

doc.DocumentElement.SelectSingleNode("catNS:Category",

nsManager);

stringcategoryName=

categoryNode.SelectSingleNode("catNS:CategoryName",

nsManager).InnerText;

stringcategoryDescription=

categoryNode.SelectSingleNode("catNS:CategoryDescription",

nsManager).InnerText;

SqlCommandcommand=new

SqlCommand("usp_InsertCategories",conn);

command.CommandType=CommandType.StoredProcedure; //AddtheCategoryNameparameter

SqlParameterparamCategoryName=new

SqlParameter("@CategoryName",SqlDbType.NVarChar,15);

paramCategoryName.Direction=ParameterDirection.Input;

paramCategoryName.Value=categoryName;

command.Parameters.Add(paramCategoryName);

//AddtheDescriptionparameter

SqlParameterparamDescription=new

SqlParameter("@Description",SqlDbType.Text);

paramDescription.Direction=ParameterDirection.Input;

paramDescription.Value=categoryDescription;

command.Parameters.Add(paramDescription); command.ExecuteNonQuery();

}

else

throw

RaiseException("AddCategories",

"http://tempuri.org/CategoriesService",

builder.ToString(),

"2000","AddCategories",FaultCode.Client);

}

returntrue;

}

catch(SoapExceptionsoapEx)

{

throwsoapEx;

}

catch(Exceptionex)

{

EventLog.WriteEntry("Test",ex.Message);

throw

RaiseException("AddCategories",

"http://tempuri.org/CategoriesService",ex.Message,

"1000",ex.Source,FaultCode.Server);

}

} 正如其名所提示的那樣,AddCategories方法負(fù)責(zé)把category的詳細(xì)信息添加到Northwind數(shù)據(jù)庫的categories表中。在執(zhí)行添加操作之前,AddCategories方法使用一個(gè)外部的XML模式文件校驗(yàn)被添加的XML數(shù)據(jù),如果校驗(yàn)失敗,它給Web服務(wù)的客戶端拋出一個(gè)異常。

讓我們來大致瀏覽上面的代碼吧。首先,把XML數(shù)據(jù)傳遞給它,調(diào)用ValidateXml方法。過一會我們再來看ValidateXml方法的代碼。ValidateXml方法返回true或false,這完全取決于XML校驗(yàn)是否成功。如果返回true,那么就創(chuàng)建一個(gè)XmlDocument對象實(shí)例,并給它導(dǎo)入XML數(shù)據(jù),另外還設(shè)置ConnectionString屬性來初始化SqlConnection對象,然后調(diào)用SqlConnection對象的Open方法。其次,創(chuàng)建一個(gè)XmlNamespaceManager實(shí)例,調(diào)用AddNamespace方法關(guān)聯(lián)一個(gè)命名空間。一旦關(guān)聯(lián)命名空間,我們就可以使用命名空間標(biāo)識符引用正確的XML元素。再次,創(chuàng)建一個(gè)SqlParameter對象實(shí)例,給存儲過程添加參數(shù)。最后,調(diào)用SqlCommand對象的ExecuteNonQuery方法執(zhí)行存儲過程。

如果ValidateXml方法返回false,則用名為RaiseException的助手方法拋出SoapException。我們現(xiàn)在就來討論RaiseException。RaiseException方法一個(gè)基本的助手方法,它封裝用來從Web服務(wù)中拋出異常的代碼。RaiseException方法的最后一個(gè)參數(shù)是一個(gè)枚舉常量,它的定義如下。

publicenumFaultCode

{

Client=0,

Server=1

}

XML校驗(yàn)失敗表示客戶端提供了無效的XML數(shù)據(jù)。這種情況,我們應(yīng)該把枚舉常量設(shè)為Client,給客戶應(yīng)用程序指出這種錯(cuò)誤。這就使得我們通知客戶端應(yīng)用程序在再一次調(diào)用Web服務(wù)之前需要檢查輸入數(shù)據(jù)的格式成為可能。如果Web服務(wù)由于一些其他原因(例如,數(shù)據(jù)庫服務(wù)器的不可用)而失敗,那么就需要設(shè)置枚舉常量為Server。這就說明Web服務(wù)失敗是由于服務(wù)器端的一些問題造成的,客戶應(yīng)用程序可以在幾秒鐘后重新請求。事實(shí)上,在catch塊中捕捉一般Exception,這正是我們要做的。 (出處:PConline)

相關(guān)文章

最新評論