FaultException<TDetail> 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
用于在客户端应用程序中捕获通过协定方式指定的 SOAP 错误。
generic <typename TDetail>
public ref class FaultException : System::ServiceModel::FaultException
public class FaultException<TDetail> : System.ServiceModel.FaultException
[System.Runtime.Serialization.KnownType("GetKnownTypes")]
[System.Serializable]
public class FaultException<TDetail> : System.ServiceModel.FaultException
[System.Serializable]
public class FaultException<TDetail> : System.ServiceModel.FaultException
type FaultException<'Detail> = class
inherit FaultException
[<System.Runtime.Serialization.KnownType("GetKnownTypes")>]
[<System.Serializable>]
type FaultException<'Detail> = class
inherit FaultException
[<System.Serializable>]
type FaultException<'Detail> = class
inherit FaultException
Public Class FaultException(Of TDetail)
Inherits FaultException
类型参数
- TDetail
可序列化错误详细信息类型。
- 继承
- 继承
- 派生
- 属性
示例
下面的代码示例演示服务如何使用 FaultException<TDetail> 类型引发将转换为由 FaultContractAttribute 指定的 SOAP 错误的托管异常。
using System;
using System.Collections.Generic;
using System.Net.Security;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(Namespace="http://microsoft.wcf.documentation")]
public interface ISampleService{
[OperationContract]
[FaultContractAttribute(
typeof(GreetingFault),
Action="http://www.contoso.com/GreetingFault",
ProtectionLevel=ProtectionLevel.EncryptAndSign
)]
string SampleMethod(string msg);
}
[DataContractAttribute]
public class GreetingFault
{
private string report;
public GreetingFault(string message)
{
this.report = message;
}
[DataMemberAttribute]
public string Message
{
get { return this.report; }
set { this.report = value; }
}
}
class SampleService : ISampleService
{
#region ISampleService Members
public string SampleMethod(string msg)
{
Console.WriteLine("Client said: " + msg);
// Generate intermittent error behavior.
Random rnd = new Random(DateTime.Now.Millisecond);
int test = rnd.Next(5);
if (test % 2 != 0)
return "The service greets you: " + msg;
else
throw new FaultException<GreetingFault>(new GreetingFault("A Greeting error occurred. You said: " + msg));
}
#endregion
}
}
Imports System.Collections.Generic
Imports System.Net.Security
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.Text
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://microsoft.wcf.documentation")> _
Public Interface ISampleService
<OperationContract, FaultContractAttribute(GetType(GreetingFault), Action:="http://www.contoso.com/GreetingFault", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
Function SampleMethod(ByVal msg As String) As String
End Interface
<DataContractAttribute> _
Public Class GreetingFault
Private report As String
Public Sub New(ByVal message As String)
Me.report = message
End Sub
<DataMemberAttribute> _
Public Property Message() As String
Get
Return Me.report
End Get
Set(ByVal value As String)
Me.report = value
End Set
End Property
End Class
Friend Class SampleService
Implements ISampleService
#Region "ISampleService Members"
Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
Console.WriteLine("Client said: " & msg)
' Generate intermittent error behavior.
Dim rand As New Random(DateTime.Now.Millisecond)
Dim test As Integer = rand.Next(5)
If test Mod 2 <> 0 Then
Return "The service greets you: " & msg
Else
Throw New FaultException(Of GreetingFault)(New GreetingFault("A Greeting error occurred. You said: " & msg))
End If
End Function
#End Region
End Class
End Namespace
下面的代码示例演示客户端使用 ServiceModel 元数据实用工具 导入时客户端代码的外观 (Svcutil.exe) 。
下面的代码示例演示客户端如何捕获 FaultException<TDetail> 类型,该类型表示操作协定中指定的自定义 SOAP 错误。
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using Microsoft.WCF.Documentation;
public class Client
{
public static void Main()
{
// Picks up configuration from the config file.
SampleServiceClient wcfClient = new SampleServiceClient();
try
{
// Making calls.
Console.WriteLine("Enter the greeting to send: ");
string greeting = Console.ReadLine();
Console.WriteLine("The service responded: " + wcfClient.SampleMethod(greeting));
Console.WriteLine("Press ENTER to exit:");
Console.ReadLine();
// Done with service.
wcfClient.Close();
Console.WriteLine("Done!");
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
Console.ReadLine();
wcfClient.Abort();
}
catch (FaultException<GreetingFault> greetingFault)
{
Console.WriteLine(greetingFault.Detail.Message);
Console.ReadLine();
wcfClient.Abort();
}
catch (FaultException unknownFault)
{
Console.WriteLine("An unknown exception was received. " + unknownFault.Message);
Console.ReadLine();
wcfClient.Abort();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message + commProblem.StackTrace);
Console.ReadLine();
wcfClient.Abort();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports Microsoft.WCF.Documentation
Public Class Client
Public Shared Sub Main()
' Picks up configuration from the config file.
Dim wcfClient As New SampleServiceClient()
Try
' Making calls.
Console.WriteLine("Enter the greeting to send: ")
Dim greeting As String = Console.ReadLine()
Console.WriteLine("The service responded: " & wcfClient.SampleMethod(greeting))
Console.WriteLine("Press ENTER to exit:")
Console.ReadLine()
' Done with service.
wcfClient.Close()
Console.WriteLine("Done!")
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
Console.ReadLine()
wcfClient.Abort()
Catch greetingFault As FaultException(Of GreetingFault)
Console.WriteLine(greetingFault.Detail.Message)
Console.ReadLine()
wcfClient.Abort()
Catch unknownFault As FaultException
Console.WriteLine("An unknown exception was received. " & unknownFault.Message)
Console.ReadLine()
wcfClient.Abort()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message + commProblem.StackTrace)
Console.ReadLine()
wcfClient.Abort()
End Try
End Sub
End Class
注解
FaultException<TDetail>捕获 Windows Communication Foundation (WCF) 客户端应用程序中的 对象,以处理在操作协定中以合同方式指定的 SOAP 错误。
已典型部署的服务使用 FaultContractAttribute 来正式指定在正常操作过程中客户端可预期收到的所有 SOAP 错误。 中的 FaultContractAttribute 错误信息显示为 FaultException<TDetail> (其中 typeparameter 是在操作 FaultContractAttribute) 到达客户端应用程序时指定的可序列化错误对象。 FaultContractAttribute 可用于指定双向服务方法和异步方法对的 SOAP 错误。
由于 FaultException<TDetail> 是一个 FaultException,因此也是一个 CommunicationException,若要捕获指定的 SOAP 错误请确保您在捕获 FaultException<TDetail> 和 FaultException 类型之前捕获 CommunicationException 类型,或者使用其中的一个异常处理程序来处理指定的异常。
注意
如果您使用 System.ServiceModel.FaultContractAttribute 指定 FaultException<TDetail>,其中类型参数为 System.String,则字符串值将分配给客户端应用程序中的 Detail 属性;客户端无法通过调用 FaultException<TDetail>.ToString 方法检索该字符串。 若要在客户端应用程序调用 Exception.ToString 时返回该字符串值,则将在操作内引发 System.ServiceModel.FaultException 异常,并将该字符串传递给构造函数。 通常情况下,建议将相应的自定义可序列化类型作为错误的详细信息类型,而不是使用 System.String。
构造函数
FaultException<TDetail>(SerializationInfo, StreamingContext) |
在将流反序列化到 FaultException<TDetail> 对象时,使用指定的序列化信息和上下文初始化 FaultException 类的新实例。 |
FaultException<TDetail>(TDetail) |
初始化使用指定详细信息对象的 FaultException<TDetail> 类的新实例。 |
FaultException<TDetail>(TDetail, FaultReason) |
初始化使用指定详细信息对象和错误原因的 FaultException<TDetail> 类的新实例。 |
FaultException<TDetail>(TDetail, FaultReason, FaultCode) |
初始化 FaultException<TDetail> 类的新实例,该类使用指定的详细信息对象、错误原因和错误代码。 |
FaultException<TDetail>(TDetail, FaultReason, FaultCode, String) |
初始化 FaultException<TDetail> 类的新实例,该类使用指定的详细信息对象以及 SOAP 错误原因、代码和操作值。 |
FaultException<TDetail>(TDetail, String) |
初始化使用指定详细信息和错误原因的 FaultException<TDetail> 类的新实例。 |
FaultException<TDetail>(TDetail, String, FaultCode) |
初始化 FaultException<TDetail> 类的新实例,该类使用指定的详细信息对象、错误原因和错误代码。 |
FaultException<TDetail>(TDetail, String, FaultCode, String) |
初始化 FaultException<TDetail> 类的新实例,该类使用指定的详细信息对象以及 SOAP 错误原因、代码和操作值。 |
属性
Action |
获取错误消息的 SOAP 操作值。 (继承自 FaultException) |
Code |
获取 SOAP 错误的错误代码。 (继承自 FaultException) |
Data |
获取键/值对的集合,这些键/值对提供有关该异常的其他用户定义信息。 (继承自 Exception) |
Detail |
获取包含错误条件详细信息的对象。 |
HelpLink |
获取或设置指向与此异常关联的帮助文件链接。 (继承自 Exception) |
HResult |
获取或设置 HRESULT(一个分配给特定异常的编码数字值)。 (继承自 Exception) |
InnerException |
获取导致当前异常的 Exception 实例。 (继承自 Exception) |
Message |
获取异常消息。 (继承自 FaultException) |
Reason |
获取 SOAP 错误的 FaultReason。 (继承自 FaultException) |
Source |
获取或设置导致错误的应用程序或对象的名称。 (继承自 Exception) |
StackTrace |
获取调用堆栈上的即时框架字符串表示形式。 (继承自 Exception) |
TargetSite |
获取引发当前异常的方法。 (继承自 Exception) |
方法
CreateMessageFault() |
创建一个 MessageFault 对象,该对象可用于创建表示 SOAP 错误的 Message。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetBaseException() |
当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根本原因。 (继承自 Exception) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetObjectData(SerializationInfo, StreamingContext) |
已过时.
实现在将对象序列化到流中时调用的 GetObjectData(SerializationInfo, StreamingContext) 方法。 |
GetObjectData(SerializationInfo, StreamingContext) |
已过时.
实现在将对象序列化到流中时调用的 GetObjectData(SerializationInfo, StreamingContext) 方法。 (继承自 FaultException) |
GetType() |
获取当前实例的运行时类型。 (继承自 Exception) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回 FaultException<TDetail> 对象的字符串。 |
事件
SerializeObjectState |
已过时.
当异常被序列化用来创建包含有关该异常的徐列出数据的异常状态对象时会出现该问题。 (继承自 Exception) |