频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

在WebService中利用SoapException处理业务流程执行的错误

来源: 作者: 出处:巧巧读书 2006-09-03 进入讨论组

  在客户端中调用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);

}浏览地址: http://www.qqread.com/xml-soap/e241362.html 更多文章 更多内容请看数据库处理专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章