在 XML Web services 中处理和引发异常

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

将使用 ASP.NET 创建的 Web 服务方法引发的异常以 SOAP 错误的形式发送回客户端。SOAP 错误是指定何时发生了错误的 SOAP 消息内的一个 Fault XML 元素。它可能包含一些详细信息,例如异常字符串和异常的来源。有关 SOAP 错误的详细信息,请参见 W3C 网站 (http://www.w3.org/TR/SOAP) 上的 SOAP 规范。

幸好客户端和使用 ASP.NET 创建的 Web 服务都不直接填充或分析 Fault XML 元素,而是使用通用设计模式在 .NET Framework 中引发和捕获异常。Web 服务可以引发一般的 SoapException 或特定于问题的异常,例如 ArgumentOutOfRangeException。无论引发何种异常,ASP.NET 都通过将异常置于 SOAP Fault 元素中来将该异常序列化为有效的 SOAP 消息。在 ASP.NET 客户端上反序列化 SOAP 消息时,将 SOAP 错误转换为 SoapException 异常,并将有关该异常的详细信息放置在 Message 属性内。这样,客户端便可以设置一个 try/catch 块来捕获 SoapException。在“如何:从使用 ASP.NET 创建的 Web 服务中引发异常”中提供了一个有关引发异常的 Web 服务的代码示例。在“如何:处理由 Web 服务方法引发的异常”中提供了一个有关捕获异常的 Web 服务客户端的代码示例。

一个 Web 应用程序可以由多项 Web 服务组成。但是,Global.asax 语法文件中的 Application_Error 事件不能用于全局异常处理。Web 服务的 HttpHandler 会使用在执行 Web 服务时发生的任何异常,并在调用 Application_Error 事件之前将其转换为 SOAP 错误。在全局异常处理程序中生成 SOAP 扩展,以处理 Web 服务异常。SOAP 扩展可以检查 ProcessMessage 方法中是否存在异常。在 ProcessMessage 方法内,检查当 Stage 属性设置为 AfterSerialize 时传递的 SoapMessageException 属性。有关 SOAP 扩展的详细信息,请参见使用 SOAP 扩展修改 SOAP 消息

从使用 ASP.NET 创建的 Web 服务中引发异常

将错误传播回客户端是通过引发异常来完成的。Web 服务方法可以通过下列方式来完成此操作:

  • 引发一个 SoapException 异常。

  • 引发一个 SoapHeaderException 异常。

  • 引发一个特定于问题的异常。

  • 允许 ASP.NET 引发异常。

下表介绍了 Web 服务可以显式引发的异常以及 ASP.NET 客户端如何收到每个异常:

所引发的异常的类型 Web 服务可以执行的操作,客户端收到的内容

除了 SoapExceptionSoapHeaderException 之外的其他异常

Web 服务方法检测到异常情况并引发特定异常,例如 ArgumentOutOfRangeException。.NET Framework 客户端收到 SoapException,该异常的详细信息被序列化为 Message 属性中的文本。

SoapException

Web 服务方法检测到异常情况并引发 SoapException。它还提供有关该问题的其他详细信息。Web 服务方法填充 Detail 属性以提供这些附加信息。.NET Framework 客户端收到带有附加信息的 SoapException

SoapHeaderException

Web 服务方法在处理 SOAP Header 元素时检测到异常情况。Web 服务方法引发一个 SoapHeaderException,后者转换为放置在响应的 Header 元素内的 Fault 元素。根据 SOAP 规范,在这种情况下 fault 必须出现在响应标头中。.NET Framework 客户端收到 SoapHeaderException

您应该引发特定于问题的异常或者向 SoapExceptionSoapHeaderException 提供额外的详细信息,如上表中所述。

XML Web services 方法未处理的异常

如果 Web 服务方法未捕获在该方法内发生的异常,下表将概述 ASP.NET 如何处理这类异常。

未处理的异常何时发生 ASP.NET 执行的操作

在执行 Web 服务方法时

ASP.NET 捕获该异常并将它发送回客户端。使用 .NET Framework 创建的 Web 服务客户端收到 SoapException,有关该异常的详细信息放置在 Message 属性中。

在处理 SOAP 标头时

ASP.NET 引发一个 SoapHeaderException。使用 .NET Framework 创建的 Web 服务客户端收到 SoapHeaderException

另请参见

任务

如何:从使用 ASP.NET 创建的 Web 服务中引发异常
如何:处理由 Web 服务方法引发的异常

参考

SoapException Class
SoapHeaderException Class

概念

生成 XML Web services 客户端

其他资源

Handling and Throwing Exceptions
使用 ASP.NET 的 XML Web services