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ù)庫(kù)的categories表中。在執(zhí)行添加操作之前,AddCategories方法使用一個(gè)外部的XML模式文件校驗(yàn)被添加的XML數(shù)據(jù),如果校驗(yàn)失敗,它給Web服務(wù)的客戶端拋出一個(gè)異常。
讓我們來(lái)大致瀏覽上面的代碼吧。首先,把XML數(shù)據(jù)傳遞給它,調(diào)用ValidateXml方法。過(guò)一會(huì)我們?cè)賮?lái)看ValidateXml方法的代碼。ValidateXml方法返回true或false,這完全取決于XML校驗(yàn)是否成功。如果返回true,那么就創(chuàng)建一個(gè)XmlDocument對(duì)象實(shí)例,并給它導(dǎo)入XML數(shù)據(jù),另外還設(shè)置ConnectionString屬性來(lái)初始化SqlConnection對(duì)象,然后調(diào)用SqlConnection對(duì)象的Open方法。其次,創(chuàng)建一個(gè)XmlNamespaceManager實(shí)例,調(diào)用AddNamespace方法關(guān)聯(lián)一個(gè)命名空間。一旦關(guān)聯(lián)命名空間,我們就可以使用命名空間標(biāo)識(shí)符引用正確的XML元素。再次,創(chuàng)建一個(gè)SqlParameter對(duì)象實(shí)例,給存儲(chǔ)過(guò)程添加參數(shù)。最后,調(diào)用SqlCommand對(duì)象的ExecuteNonQuery方法執(zhí)行存儲(chǔ)過(guò)程。
如果ValidateXml方法返回false,則用名為RaiseException的助手方法拋出SoapException。我們現(xiàn)在就來(lái)討論RaiseException。RaiseException方法一個(gè)基本的助手方法,它封裝用來(lái)從Web服務(wù)中拋出異常的代碼。RaiseException方法的最后一個(gè)參數(shù)是一個(gè)枚舉常量,它的定義如下。
publicenumFaultCode
{
Client=0,
Server=1
}
XML校驗(yàn)失敗表示客戶端提供了無(wú)效的XML數(shù)據(jù)。這種情況,我們應(yīng)該把枚舉常量設(shè)為Client,給客戶應(yīng)用程序指出這種錯(cuò)誤。這就使得我們通知客戶端應(yīng)用程序在再一次調(diào)用Web服務(wù)之前需要檢查輸入數(shù)據(jù)的格式成為可能。如果Web服務(wù)由于一些其他原因(例如,數(shù)據(jù)庫(kù)服務(wù)器的不可用)而失敗,那么就需要設(shè)置枚舉常量為Server。這就說(shuō)明Web服務(wù)失敗是由于服務(wù)器端的一些問(wèn)題造成的,客戶應(yīng)用程序可以在幾秒鐘后重新請(qǐng)求。事實(shí)上,在catch塊中捕捉一般Exception,這正是我們要做的。 (出處:PConline)
相關(guān)文章
Win2003+IIS6.0+php5.2.2+MySQL 5.0.41+ZendOptimizer 3.2.8 +ph
Win2003+IIS6.0+php5.2.2+MySQL 5.0.41+ZendOptimizer 3.2.8 +phpMyAdmin 2.10.1環(huán)境配置安裝教程圖文詳解...2007-06-06
3389遠(yuǎn)程登錄怎么優(yōu)化才能解決藍(lán)屏或者黑屏問(wèn)題
在遠(yuǎn)程登入時(shí),出現(xiàn)藍(lán)屏或者是黑屏的問(wèn)題,想必大家都有遇到過(guò)吧,在本文將為大家詳細(xì)介紹下如何優(yōu)化3389登錄解決此問(wèn)題,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
Jenkins遷移之pipeline共享庫(kù)的實(shí)踐示例
這篇文章主要為大家介紹了Jenkins遷移之pipeline共享庫(kù)的實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Windows下Apache+Tomcat7負(fù)載均衡配置方法詳解
本文介紹了在WINDOWS環(huán)境下Apache2.4+Tomcat7的負(fù)載均衡配置方法2018-12-12
Linux Apache Web 服務(wù)器(續(xù)一)
四、配置Apache基礎(chǔ)篇,讓W(xué)WW服務(wù)器跑起來(lái) Apache服務(wù)器軟件的配置文件主要有:“access.conf”:用于設(shè)置系統(tǒng)中的存取方式和環(huán)境;“httpd.conf”:用于設(shè)置服務(wù)器啟動(dòng)的基本環(huán)境;“srm.conf”:主要用于做文件資源上的設(shè)定;“mime.type”:記錄Apache服務(wù)器所能識(shí)別的MIME格式。2008-03-03
前端實(shí)時(shí)通信的8種方式及其優(yōu)缺點(diǎn)和實(shí)現(xiàn)方式
這篇文章主要介紹了前端實(shí)時(shí)通信的8種方式及其優(yōu)缺點(diǎn)和實(shí)現(xiàn)方式,需要的朋友可以參考下2022-05-05

