文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发Web服务器 → Web服务中的异常处理(2)

Web服务中的异常处理(2)

时间:2004/11/7 4:01:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



            

Web服务的实现


为了达到这个示例的目的,我们创建一个名为CategoriesService的Web服务,选择一个可视化的C#ASP.NETWeb服务作为项目的模版。一旦创建项目,我们就添加一个名为AddCategories的方法,并且给这个方法添加下列代码:

  [WebMethod]

  publicboolAddCategories(stringxml)

  {

  try

  {

  using(SqlConnectionconn=newSqlConnection())

  {

  if(ValidateXml(xml))

  {

  XmlDocumentdoc=newXmlDocument();

  doc.LoadXml(xml);

  conn.ConnectionString=

  "server=localhost;uid=sa;pwd=thiru;database=northwind";

  conn.Open();

  XmlNamespaceManagernsManager=new

  XmlNamespaceManager(doc.NameTable);

  //AddthenamespacetotheNamespaceManager
  
  nsManager.AddNamespace("catNS",
  
  "http://tempuri.org/CategoriesNamespace");
  
  XmlNodecategoryNode=
  
  doc.DocumentElement.SelectSingleNode("catNS:Category",
  
  nsManager);
  
  stringcategoryName=
  
  categoryNode.SelectSingleNode("catNS:CategoryName",
  
  nsManager).InnerText;
  
  stringcategoryDescription=
  
  categoryNode.SelectSingleNode("catNS:CategoryDescription",
  
  nsManager).InnerText;
  
  SqlCommandcommand=new
  
  SqlCommand("usp_InsertCategories",conn);
  
  command.CommandType=CommandType.StoredProcedure;


//AddtheCategoryNameparameter
  
  SqlParameterparamCategoryName=new
  
  SqlParameter("@CategoryName",SqlDbType.NVarChar,15);
  
  paramCategoryName.Direction=ParameterDirection.Input;
  
  paramCategoryName.Value=categoryName;
  
  command.Parameters.Add(paramCategoryName);
  
  //AddtheDescriptionparameter
  
  SqlParameterparamDescription=new
  
  SqlParameter("@Description",SqlDbType.Text);
  
  paramDescription.Direction=ParameterDirection.Input;
  
  paramDescription.Value=categoryDescription;
  
  command.Parameters.Add(paramDescription);


command.ExecuteNonQuery();
  
  }
  
  else
  
  throw
  
  RaiseException("AddCategories",
  
  "http://tempuri.org/CategoriesService",
  
  builder.ToString(),
  
  "2000","AddCategories",FaultCode.Client);
  
  }
  
  returntrue;
  
  }

  catch(SoapExceptionsoapEx)
  
  {
  
  throwsoapEx;
  
  }
  
  catch(Exceptionex)
  
  {
  
  EventLog.WriteEntry("Test",ex.Message);
  
  throw
  
  RaiseException("AddCategories",
  
  "http://tempuri.org/CategoriesService",ex.Message,

    "1000",ex.Source,FaultCode.Server);

  }
  
  }


正如其名所提示的那样,AddCategories方法负责把category的详细信息添加到Northwind数据库的categories表中。在执行添加操作之前,AddCategories方法使用一个外部的XML模式文件校验被添加的XML数据,如果校验失败,它给Web服务的客户端抛出一个异常。
  
让我们来大致浏览上面的代码吧。首先,把XML数据传递给它,调用ValidateXml方法。过一会我们再来看ValidateXml方法的代码。ValidateXml方法返回true或false,这完全取决于XML校验是否成功。如果返回true,那么就创建一个XmlDocument对象实例,并给它导入XML数据,另外还设置ConnectionString属性来初始化SqlConnection对象,然后调用SqlConnection对象的Open方法。其次,创建一个XmlNamespaceManager实例,调用AddNamespace方法关联一个命名空间。一旦关联命名空间,我们就可以使用命名空间标识符引用正确的XML元素。再次,创建一个SqlParameter对象实例,给存储过程添加参数。最后,调用SqlCommand对象的ExecuteNonQuery方法执行存储过程。
  
  如果ValidateXml方法返回false,则用名为RaiseException的助手方法抛出SoapException。我们现在就来讨论RaiseException。RaiseException方法一个基本的助手方法,它封装用来从Web服务中抛出异常的代码。RaiseException方法的最后一个参数是一个枚举常量,它的定义如下。
  
  publicenumFaultCode
  
  {

  Client=0,
  
    Server=1

  }
  
  XML校验失败表示客户端提供了无效的XML数据。这种情况,我们应该把枚举常量设为Client,给客户应用程序指出这种错误。这就使得我们通知客户端应用程序在再一次调用Web服务之前需要检查输入数据的格式成为可能。如果Web服务由于一些其他原因(例如,数据库服务器的不可用)而失败,那么就需要设置枚举常量为Server。这就说明Web服务失败是由于服务器端的一些问题造成的,客户应用程序可以在几秒钟后重新请求。事实上,在catch块中捕捉一般Exception,这正是我们要做的。

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 CSS网页布局困扰新手的 网站重定向技巧让你的网站流量不流失让Apache性能显著提升的25个优化技巧Windows主机wordpress伪静态设置如何在IIS中授予特定内容Web服务器权限

人气排行 文件夹无法访问、拒绝访问的解决方法IIS6.0服务器搭建网站无法访问解决方法iis设置让iis支持flv格式_2003 iis添加flvCSS网页布局困扰新手的八个问题Apache HTTP Server配置教程Serv-U错误代码大全教你如何解决Web服务器能Ping通但不能访问让Apache性能显著提升的25个优化技巧