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

客户端的异常处理
这个部分,我们将看看在客户端怎样处理从Web服务中所抛出的异常。为了说明这个做法,我们来创建一个新项目CategoriesServiceClient。一旦项目被创建,就在默认的表单上添加一个命令按钮,并命名为btnInvoke。因为需要在客户端引用Web服务,所以在项目CategoriesService中添加一个WebReference。可以通过Project->AddReference菜单选项来完成添加。然后修改命令按钮的Click事件,如下所示。

privatevoidbtnInvoke_Click(objectsender,System.EventArgse)

{

try

{

Categoriescat=newCategories();

MessageBox.Show(cat.AddCategories("
XmlNamespaceManagernsManager=new

XmlNamespaceManager(doc.NameTable);

//AddthenamespacetotheNamespaceManager

nsManager.AddNamespace("errorNS",

"http://tempuri.org/CategoriesService");

XmlNodecategoryNode=

doc.DocumentElement.SelectSingleNode("errorNS:Error",

nsManager);

stringerrorNumber=

categoryNode.SelectSingleNode("errorNS:ErrorNumber",

nsManager).InnerText;

stringerrorMessage=
categoryNode.SelectSingleNode("errorNS:ErrorMessage",

nsManager).InnerText;

stringerrorSource=

categoryNode.SelectSingleNode("errorNS:ErrorSource",

nsManager).InnerText;

MessageBox.Show("ErrorNumberis"+errorNumber);

MessageBox.Show("ErrorMessageis"+errorMessage);

MessageBox.Show("ErrorSourceis"+errorSource);

}
catch(Exceptionex)

{

MessageBox.Show(ex.Message);

}

}

客户端需要处理Web服务所产生的异常。因为Web服务所产生的异常都是SoapException形式的,所以调用Web服务的客户应用程序的代码应该被包含在try...catch块中,并且第一个catch块应该具有捕捉SoapException的处理器。让我们大致看看以上所示的代码。

首先创建一个Categories类的实例。然后传入所要求的XML字符串参数,调用Categories类的AddCategories方法。再后,我们让catch块处理Web服务所产生的异常。在这个代码块中,我们以消息提示框的方式显示异常的产生者。我们通过使用SoapException对象的Code属性来完成这个显示。如果异常是因为客户端的非法输入而产生的,那么Code属性被设置为Client。如果异常是因为Web服务代码(例如,据库服务器已经关闭)而产生的,则Code属性被设为Server。

然后,我们把包含在SoapException对象的Detail元素中的XML数据导入到一个XmlDocument对象中。类似于Web服务的代码,这里同样利用XmlNamespaceManager对象把命名空间与XmlDocument对象关联在一起。之后,取出包含在不同元素中的值,并把它们赋给本地变量。最后,使用消息提示框显示本地变量的值。
把它放在一起

至此,我们已经完成了客户应用程序,现在让我们运行测试它。如果运行客户程序,它将显示一个消息框(具有true值),那么则表明categories详细信息已经成功保存到数据库中。现在,从输入的XML数据中删除元素,运行客户程序。将会得到一个消息,表明异常的原因是客户程序,除此之外,还可以在SoapException对象中得到更多的异常信息。

正如前面所提到的那样,如果Web服务失败是由于服务器端的一些问题引起的,那么SoapException对象的Code属性应该被设置为Server。为了测试这个,修改Web服务中的连接字符串为一个无效值。现在,如果运行客户程序,将会得到一个表明异常的原因是Server的消息(该例中的Web服务)。

结论

本文中,我们已经了解到怎样使用SoapException对象来处理和传递异常给Web服务的客户端。我们还了解到SoapException对象是怎样利用SOAPfault编码(定义在SOAP规范中)来传递异常的。顺便,我们还讨论了处理客户端所产生的异常的步骤。虽然我们创建的应用的功能非常的简单,但是它给我们理解怎样抛出和处理Web服务中的异常提供了一个坚实的基础.
(出处:PConline)

(0)

相关推荐

  • Web服务中的异常处理(4)

    客户端的异常处理 这个部分,我们将看看在客户端怎样处理从Web服务中所抛出的异常.为了说明这个做法,我们来创建一个新项目CategoriesServiceClient.一旦项目被创建,就在默认的表单上添加一个命令按钮,并命名为btnInvoke.因为需要在客户端引用Web服务,所以在项目CategoriesService中添加一个WebReference.可以通过Project->AddReference菜单选项来完成添加.然后修改命令按钮的Click事件,如下所示. privatevoidbt

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

    Web服务的实现 为了达到这个示例的目的,我们创建一个名为CategoriesService的Web服务,选择一个可视化的C#ASP.NETWeb服务作为项目的模版.一旦创建项目,我们就添加一个名为AddCategories的方法,并且给这个方法添加下列代码: [WebMethod] publicboolAddCategories(stringxml) { try { using(SqlConnectionconn=newSqlConnection()) { if(ValidateXml(xml

  • 在Rust web服务中使用Redis的方法

    Redis一直是网络生态系统的重要组成部分,它经常用作缓存.消息代理或简单地用作数据存储. 在这篇文章中,我们将演示如何在一个Rust web应用程序中使用Redis. 我们将探索两种种使用Redis的方法: 使用同步连接池 使用异步连接池 对于同步池,我们使用基于r2d2库的r2d2-redis.我们在异步解决方案中使用mobc,还有许多其他异步连接池,如deadpool和bb8,它们都以类似的方式工作. 话不多说,让我们开始吧! 新建一个项目: cargo new rust-redis-we

  • ASP.NET如何使用web服务的会话状态

    在web服务中要用到ASP.NET中的会话对象,有2件事情需要做. 1.WebService 类需要继承System.Web.Services.WebService类 2.WebMethod中的EnableSession属性值应该设置为true 来看我们CalculatorWebService类,我们可以看到,它已经继承System.Web.Services.WebService类.但是,我们需要EnableSession属性值设置为true. 本文中,我们将试试在使用一个如下所示的GridVi

  • JQuery中ajax方法访问web服务实例

    本文实例讲述了JQuery中ajax方法访问web服务.分享给大家供大家参考.具体分析如下: 说明: ArrayList 中 存为对象CollegeDepartInfo 其属性为:stirng CollegeDepartTitle 和 int CollegeDepartId 在javascript中 ddlDepart.options[ddlDepart.length]=new Option(n.CollegeDepartTitle,n.CollegeDepartId); Option的参数就是

  • 在 ASP.NET Core 中为 gRPC 服务添加全局异常处理

    目录 一.咨询区 Dmitriy 二.回答区 valentasm 三.点评区 以下文章来源于公众号:DotNetCore实战 一.咨询区 Dmitriy 在 ASP.NET Core 中使用GRPC.ASPNETCore 工具包写 gRPC 服务,想实现 gRPC 的异常全局拦截, 代码如下: app.UseExceptionHandler(configure => {     configure.Run(async e =>     {         Console.WriteLine(&

  • 手把手教你在.NET中创建Web服务实现方法

    最近发现在.NET平台下使用Web服务还是很简单的.下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如下: 复制代码 代码如下: using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using Syst

  • 如何用C写一个web服务器之基础功能

    服务器架构 目标架构 以 nginx 的思想来考虑本服务器架构,初步考虑如下图: 当然 php 进程也可以替换为其他的脚本语言,可以更改源码中的 command 变量实现. 服务器有一个 master 进程,其有多个子进程为 worker 进程,master 进程受理客户端的请求,然后分发给 worker 进程,worker 进程处理 http 头信息后将参数传递给 php 进程处理后,将结果返回到上层,再响应给客户端. 也考虑过使用 php-fpm 的 worker 进程池方式,那样的话 ph

  • 利用docker搭建web服务环境的方法步骤

    前言 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的.对于 PHP 的 Web 开发来说,开发环境至少要有一个 Web 服务器(如 Apache.Nginx).一个数据库服务器(如 MySQL)和一个 PHP 解析器吧,如果你的 PHP 代码使用的一些扩展,那你还需要给你的 PHP 安装上这些扩展,那样你的 PHP 代码才能够顺利地跑起来.对于一个只想静静地敲代码的开发人员来说,开发环境的安装与配置这种事情,只要经历一次就已经很折腾人了.可

  • 为何XML对Web服务很重要

    Web服务经常从它的组件技术的角度来进行描述.SOAP.UDDI.WSDL.XML以及HTTP各自组成了Web服务体系的一部分,它们都发挥了重要作用.让我们看看XML技术对Web服务平台的贡献. 标准化 与其它Web服务技术相比,标准化是XML特色之一.XML提供了Web服务应用程序之间传输数据的标准格式.万维网联盟(W3C)管理XML标准并发布给全球的XML技术提供者,这就确保了XML产品的兼容性. 除了XML引擎和产品外还有XML文法(grammar).每一个XML语法都是一种在某个特定问题

随机推荐