在 XML Web services 中处理和引发异常
将使用 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 时传递的 SoapMessage 的 Exception 属性。 有关 SOAP 扩展的详细信息,请参见使用 SOAP 扩展修改 SOAP 消息。
从使用 ASP.NET 创建的 Web 服务中引发异常
将错误传播回客户端是通过引发异常来完成的。 Web 服务方法可以通过下列方式来完成此操作:
引发一个 SoapException 异常。
引发一个 SoapHeaderException 异常。
引发一个特定于问题的异常。
允许 ASP.NET 引发异常。
下表介绍了 Web 服务可以显式引发的异常以及 ASP.NET 客户端如何收到每个异常:
所引发的异常的类型 | Web 服务可以执行的操作,客户端收到的内容 |
---|---|
除了 SoapException 或 SoapHeaderException 之外的其他异常 |
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。 |
您应该引发特定于问题的异常或者向 SoapException 或 SoapHeaderException 提供额外的详细信息,如上表中所述。
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
概念
其他资源
Handling and Throwing Exceptions
使用 ASP.NET 的 XML Web services
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。