在WebService中利用SoapException處理商務程序執行的錯誤

來源:互聯網
上載者:User
web|錯誤|執行 在用戶端中調用WebService的方法處理商務程序,如果業務處理常式返回錯誤,一般我們可以利用返回錯誤碼的方式將處理結果返回給客戶段,客戶段針對不同的錯誤碼進行相應的錯誤處理,按照這種處理流程有時候用戶端可能需要很多重複的代碼來響應不同的錯誤碼,一個簡單的例子就是,對於不同的錯誤碼,顯示不同的錯誤訊息,有些系統中,業務處理的錯誤訊息可能是放在業務資料庫中的,在這種情況下,客戶段要顯示錯誤訊息,還必須要調用相應的Service擷取錯誤訊息。
WebService利用SoapException的Detail提供了給用戶端返回更詳細錯誤資訊、或業務相關資訊的能力,例如在一個認證的例子中可以利用下面代碼給客戶段返回異常,並告知客戶錯誤碼和錯誤訊息,以及其他相關資訊
private static int Authenticate( CredentialSoapHeader header)
{
int iRet ;

try
{
SqlConnection conn = new SqlConnection(CommonDB.ConnectionString);
SqlCommand cmd = new SqlCommand("P_Employee_Check", conn);
cmd.Parameters.Add("@EmployeeCode", header.Username);
cmd.Parameters.Add("@EmployeePassword", header.Password);
cmd.Parameters.Add("@ReturnValue",-1) ;
cmd.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue ;
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
iRet = Convert.ToInt32(cmd.Parameters["@ReturnValue"].Value) ;

}
catch (Exception ex)
{
iRet = 1000 ;
throw new SoapException(string.Empty, SoapException.ServerFaultCode, "Service",ErrorMessage.CreateSoapExDetail(iRet , "資料庫操作產生異常.\n"+ex.Message));
}
//檢查返回碼
if (iRet!=0)
{
throw new SoapException(string.Empty, SoapException.ClientFaultCode, "Service",ErrorProcess.CreateSoapExDetail(iRet,""));
}

return iRet ;
}

產生SoapException的Detail的代碼如下:
public static System.Xml.XmlNode CreateSoapExDetail(int ExCode,string strMessage)
{
XmlDocument doc = new System.Xml.XmlDocument();
XmlNode node = doc.CreateNode(XmlNodeType.Element,
SoapException.DetailElementName.Name,
SoapException.DetailElementName.Namespace);


// 增加錯誤碼
System.Xml.XmlNode NodeCode = doc.CreateNode(XmlNodeType.Element,"ExCode","ExCode");
NodeCode.InnerText = ExCode.ToString() ;

// 增加錯誤訊息
System.Xml.XmlNode NodeMessage = doc.CreateNode(XmlNodeType.Element,"ExMessage", "ExMessage");
if(strMessage.Trim()=="")
{
NodeMessage.InnerText = GetErrorMessage(ExCode) ;//根據從資料庫中取相應的錯誤訊息
}
else
{
NodeMessage.InnerText = strMessage ;
}

// Append the two child elements to the detail node.
node.AppendChild(NodeCode);
node.AppendChild(NodeMessage);
return node ;
}

用戶端補獲SoapException後處理方法如下:
catch (SoapException soapEx)
{
iRet = Convert.ToInt32(soapEx.Detail["ExCode"].InnerText) ;
MessageBox.Show(soapEx.Detail["ExMessage"].InnerText, "服務端錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);

}





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.