C#開發之Web Service的異常處理(一)


在實際開發中,web service的使用變得日益普及,特別是在移動互聯網上,移動終端響應與請求數據往往是連接web service得到的。往往web service發布在服務器端,也有可能發布在其他地方,總之是與客戶端相分離的。
所以,客戶端請求web服務的異常處理與本地操作的異常處理是不同的。按照原理來說,web服務的傳遞參數是以XML為格式的。
客戶端請求web服務有三種情況:
1.web服務沒有響應。
2.請求數據在執行過程中發生異常,導致執行錯誤。
3.得到正確的執行結果。
web服務沒有響應原因可能是網絡中斷或web服務沒有啟動。
執行異常,有可能是SQL指令錯誤或參數錯誤或者是其他程序異常等。
web服務沒有響應的異常,可以在客戶端請求web服務時捕獲到,即try{}catch{MessageBox.Show("網絡中斷,請稍后再試!");}。
web服務中程序的異常的處理可以分為兩種情況:
1.定義一組返回值標准,直接將錯誤信息拋給客戶端。
2.記錄到web日志中,同時客戶端捕獲異常。
本次博客只寫第一種情況。
異常的拋出主要為了在程序出現問題時方便調試使用的或者盡量避免不必要的異常處理,使程序更嚴謹、健壯。
按照對數據的操作,分成查詢、添加/刪除/修改兩種情況說明:
1.查詢時:
若查詢正常,則返回正常結果,例如結構如下:

<?xml version="1.0" encoding="GB2312" ?> 
<NewDataSet>
<STUDENT>
<SERIAL_NO>232</SERIAL_NO>
<DEPT_CODE>2029</DEPT_CODE>
<DEPT_NAME>化工學院</DEPT_NAME>
</STUDENT>
<STUDENT>
<SERIAL_NO>232</SERIAL_NO>
<DEPT_CODE>2029</DEPT_CODE>
<DEPT_NAME>化工學院</DEPT_NAME>
</STUDENT>
</NewDataSet>

若出現異常,如下:

<?xml version="1.0" encoding="GB2312" ?> 
<NewDataSet>
<Exception>
<Exception_Flag>1</Exception_Flag>
<Exception_Value>沒有查詢到結果</Exception_Value>
<Exception_Error>沒有查詢到結果!</Exception_Error>
</Exception>
</NewDataSet>

2. 添加/刪除/修改成功時,返回結構也定義成xml格式如下:

<?xml version="1.0" encoding="GB2312" ?> 
<NewDataSet>
<Exception>
<Exception_Flag>0</Exception_Flag>
<Exception_Value>執行成功</Exception_Value>
<Exception_Error></Exception_Error>
</Exception>
</NewDataSet>

 若失敗,有異常時,格式如下:

<?xml version="1.0" encoding="GB2312" ?> 
<NewDataSet>
<Exception>
<Exception_Flag>2</Exception_Flag>
<Exception_Value>操作發生異常</Exception_Value>
<Exception_Error>Exception.message()</Exception_Error>
</Exception>
</NewDataSet>

以上是web服務端的返回值,即請求web服務都會返回xml文檔,解析后知道操作是否成功,有無異常。
程序解析如下:

public static List<STUDENT> GetSTUDENT(string strXml, out int flag, out string strValue, out string strError)
{
flag = 0;
strValue = "";
strError = "";
List<STUDENT> lstSTUDENT = new List<STUDENT>();
//Xml解析
XmlDocument doc = new XmlDocument();
//加載XML字符串
doc.LoadXml(strXml);

XmlNodeList xxList = doc.GetElementsByTagName("NewDataSet"); //取得節點名為NewDataSet的集合


foreach(XmlNode fatherNode in xxList)
{
XmlNodeList childList = fatherNode.ChildNodes;

foreach(XmlNode xxNode in childList)//一個Object集合
{

STUDENT STUDENT = new STUDENT();
XmlNodeList childList2 = xxNode.ChildNodes;

foreach(XmlNode node in childList2)
{
String temp = node.Name;
switch(temp)
{

case "NAME": //姓名
STUDENT.Name = node.InnerText;
break;
case "SEX"://性別
STUDENT.Sex = node.InnerText;
break;
case "DATE_OF_BIRTH"://出生日期
STUDENT.Date_Of_Birth = DateTime.Parse(node.InnerText);
break;
case "NATION"://民族
STUDENT.Nation = node.InnerText;
break;
case "IDENTITY"://身份
STUDENT.Identity = node.InnerText;
break;


case "Exception_Flag"://異常標識
flag = Int32.Parse(node.InnerText);
break;
case "Exception_Value"://異常提示
strValue = node.InnerText;
break;
case "Exception_Error"://異常詳細描述
strError = node.InnerText;
break;
default:
break;
}
}
lstSTUDENT.Add(STUDENT);
}
}
return lstSTUDENT;
}



 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



C#的異常處理 C# -- 異常和異常處理 C#錯誤與異常處理 【C#基礎】異常處理 【基礎】C#異常處理的總結 C#總結之異常處理 C#錯誤和異常處理 C#異常處理總結 C# 全局異常處理 十、C# 異常處理
 
粤ICP备14056181号  © 2014-2020 ITdaan.com