Web服務(wù)中的異常處理(4)
更新時(shí)間:2006年10月11日 00:00:00 作者:
客戶(hù)端的異常處理 這個(gè)部分,我們將看看在客戶(hù)端怎樣處理從Web服務(wù)中所拋出的異常。為了說(shuō)明這個(gè)做法,我們來(lái)創(chuàng)建一個(gè)新項(xiàng)目CategoriesServiceClient。一旦項(xiàng)目被創(chuàng)建,就在默認(rèn)的表單上添加一個(gè)命令按鈕,并命名為btnInvoke。因?yàn)樾枰诳蛻?hù)端引用Web服務(wù),所以在項(xiàng)目CategoriesService中添加一個(gè)WebReference??梢酝ㄟ^(guò)Project->AddReference菜單選項(xiàng)來(lái)完成添加。然后修改命令按鈕的Click事件,如下所示。
privatevoidbtnInvoke_Click(objectsender,System.EventArgse)
{
try
{
Categoriescat=newCategories();
MessageBox.Show(cat.AddCategories(" XmlNamespaceManagernsManager=new
XmlNamespaceManager(doc.NameTable);
//AddthenamespacetotheNamespaceManager
nsManager.AddNamespace("errorNS",
"http://tempuri.org/CategoriesService");
XmlNodecategoryNode=
doc.DocumentElement.SelectSingleNode("errorNS:Error",
nsManager);
stringerrorNumber=
categoryNode.SelectSingleNode("errorNS:ErrorNumber",
nsManager).InnerText;
stringerrorMessage=
categoryNode.SelectSingleNode("errorNS:ErrorMessage",
nsManager).InnerText;
stringerrorSource=
categoryNode.SelectSingleNode("errorNS:ErrorSource",
nsManager).InnerText;
MessageBox.Show("ErrorNumberis"+errorNumber);
MessageBox.Show("ErrorMessageis"+errorMessage);
MessageBox.Show("ErrorSourceis"+errorSource);
} catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
客戶(hù)端需要處理Web服務(wù)所產(chǎn)生的異常。因?yàn)閃eb服務(wù)所產(chǎn)生的異常都是SoapException形式的,所以調(diào)用Web服務(wù)的客戶(hù)應(yīng)用程序的代碼應(yīng)該被包含在try...catch塊中,并且第一個(gè)catch塊應(yīng)該具有捕捉SoapException的處理器。讓我們大致看看以上所示的代碼。
首先創(chuàng)建一個(gè)Categories類(lèi)的實(shí)例。然后傳入所要求的XML字符串參數(shù),調(diào)用Categories類(lèi)的AddCategories方法。再后,我們讓catch塊處理Web服務(wù)所產(chǎn)生的異常。在這個(gè)代碼塊中,我們以消息提示框的方式顯示異常的產(chǎn)生者。我們通過(guò)使用SoapException對(duì)象的Code屬性來(lái)完成這個(gè)顯示。如果異常是因?yàn)榭蛻?hù)端的非法輸入而產(chǎn)生的,那么Code屬性被設(shè)置為Client。如果異常是因?yàn)閃eb服務(wù)代碼(例如,據(jù)庫(kù)服務(wù)器已經(jīng)關(guān)閉)而產(chǎn)生的,則Code屬性被設(shè)為Server。
然后,我們把包含在SoapException對(duì)象的Detail元素中的XML數(shù)據(jù)導(dǎo)入到一個(gè)XmlDocument對(duì)象中。類(lèi)似于Web服務(wù)的代碼,這里同樣利用XmlNamespaceManager對(duì)象把命名空間與XmlDocument對(duì)象關(guān)聯(lián)在一起。之后,取出包含在不同元素中的值,并把它們賦給本地變量。最后,使用消息提示框顯示本地變量的值。 把它放在一起
至此,我們已經(jīng)完成了客戶(hù)應(yīng)用程序,現(xiàn)在讓我們運(yùn)行測(cè)試它。如果運(yùn)行客戶(hù)程序,它將顯示一個(gè)消息框(具有true值),那么則表明categories詳細(xì)信息已經(jīng)成功保存到數(shù)據(jù)庫(kù)中?,F(xiàn)在,從輸入的XML數(shù)據(jù)中刪除元素,運(yùn)行客戶(hù)程序。將會(huì)得到一個(gè)消息,表明異常的原因是客戶(hù)程序,除此之外,還可以在SoapException對(duì)象中得到更多的異常信息。
正如前面所提到的那樣,如果Web服務(wù)失敗是由于服務(wù)器端的一些問(wèn)題引起的,那么SoapException對(duì)象的Code屬性應(yīng)該被設(shè)置為Server。為了測(cè)試這個(gè),修改Web服務(wù)中的連接字符串為一個(gè)無(wú)效值?,F(xiàn)在,如果運(yùn)行客戶(hù)程序,將會(huì)得到一個(gè)表明異常的原因是Server的消息(該例中的Web服務(wù))。
結(jié)論
本文中,我們已經(jīng)了解到怎樣使用SoapException對(duì)象來(lái)處理和傳遞異常給Web服務(wù)的客戶(hù)端。我們還了解到SoapException對(duì)象是怎樣利用SOAPfault編碼(定義在SOAP規(guī)范中)來(lái)傳遞異常的。順便,我們還討論了處理客戶(hù)端所產(chǎn)生的異常的步驟。雖然我們創(chuàng)建的應(yīng)用的功能非常的簡(jiǎn)單,但是它給我們理解怎樣拋出和處理Web服務(wù)中的異常提供了一個(gè)堅(jiān)實(shí)的基礎(chǔ).
(出處:PConline)
相關(guān)文章
tomcat 5.0 + apache 2.0 完全安裝步驟詳解
Apache httpd-2.0.47 + Tomcat jakarta-tomcat-4.1.24 + jk2 + php-4.3.3 的安裝: 服務(wù)器環(huán)境: RedHat Linux 8.0 J2sdk1.4.1_02 Tomcat 4.1.12 binary Apache 2.0.47 built from source jk2 connector source from jakarta.apache.org2008-03-03HTML靜態(tài)頁(yè)面引入公共html文件(ssi服務(wù)器端指令詳解)
今天為大家介紹一種在HTML靜態(tài)文件中引用其它HTML靜態(tài)文件的方法SSI的詳細(xì)使用方法與指令介紹2018-04-04Web服務(wù)器日志統(tǒng)計(jì)分析完全解決方案
請(qǐng)注意本文已刊載在《開(kāi)放系統(tǒng)世界》2003年第二期,該文章版權(quán)屬于該雜志所有,請(qǐng)勿隨意轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)保留該聲明摘要:對(duì)于所有的ICP來(lái)說(shuō),除了保證網(wǎng)站穩(wěn)定正常運(yùn)行以外,一個(gè)重要的問(wèn)題就是網(wǎng)站訪問(wèn)量的統(tǒng)計(jì)和分析報(bào)表,這對(duì)于了解和監(jiān)控網(wǎng)站的運(yùn)行狀態(tài),對(duì)提高各個(gè)網(wǎng)站的服務(wù)能力和服務(wù)水平是必不可少的。通過(guò)對(duì)Web服務(wù)器的日志文件進(jìn)行分析和統(tǒng)計(jì),能夠有效掌握系統(tǒng)運(yùn)行情況以及網(wǎng)站內(nèi)容的受訪問(wèn)情況、加強(qiáng)對(duì)整個(gè)網(wǎng)站及其內(nèi)容的維護(hù)與管理。本文對(duì)Web服務(wù)器日志分析的原理和技術(shù)進(jìn)行討論。2008-03-03虛擬服務(wù)器實(shí)現(xiàn)方法(動(dòng)態(tài)均衡)
虛擬服務(wù)器:對(duì)外它是單一的入口,對(duì)內(nèi)有很多臺(tái)計(jì)算機(jī)為它服務(wù).對(duì)使用它的人來(lái)說(shuō),它是一臺(tái)機(jī)器,有單一的入口點(diǎn).具體的實(shí)現(xiàn)技術(shù)包括兩種: 應(yīng)用層的虛擬服務(wù)器,網(wǎng)絡(luò)層的虛擬服務(wù)器.2008-03-03