设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 网络编程 >> .net >> 在WebService中利用SoapException处理业务流程执行的错误
精品推荐
.net点击TOP10
·我的.NET书架 (入门篇)
·.NET:是什么?将走向哪里?
·.NET 初 级 读 本
·在ASP.NET中把图片保存到SQL SERVER数据库
·从零开始学ASP.NET(基础篇)
·DataGrid导成Excel的例子
·ASP.Net Web Page深入探讨(一)
·.NET Petshop详解(三):petshop三层结构之MiddleTire
·CHK文件恢复工具
·快速认识asp.net(一)
网络编程点击TOP10
·ASP.NET 程序中常用的三十三种代码
·利用ASP.NET构建网上考试系统
·C#版的网站新闻发布系统
·设计ASP.NET新闻管理系统
·我的.NET书架 (入门篇)
·用ASP.NET和XML做的新闻系统
·.NET:是什么?将走向哪里?
·.NET 初 级 读 本
·十天学会ASP.net之第一天
·用C#实现木马程序
精选专题

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

作者: 来源:网络文章 时间:2005-12-13 19:33:21

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

   }


在WebService中利用SoapException处理业务流程执行的错误 相关文章:
在WebService中利用SoapException处理业务流程执行的错误 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com