在WebService中利用SoapException处理业务流程执行的错误
来源:岁月联盟
时间:2004-10-25
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);
}
上一篇:字符串转为16进制
下一篇:asp.net控件加載