FaultException<TDetail> Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Utilisé dans une application cliente pour intercepter les erreurs SOAP spécifiées contractuellement.
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
Paramètres de type
- TDetail
Type de détail de l'erreur sérialisable.
- Héritage
- Héritage
- Dérivé
- Attributs
Exemples
L'exemple de code suivant montre comment un service utilise le type d'FaultException<TDetail> pour lever une exception gérée qui est convertie en erreur SOAP spécifiée par l'FaultContractAttribute.
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
L’exemple de code suivant montre à quoi ressemble le code client lorsqu’il est importé par le client à l’aide de l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe) .
L'exemple de code suivant indique comment un client peut intercepter le type FaultException<TDetail> qui représente l'erreur SOAP personnalisée spécifiée dans le contrat d'opération.
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
Remarques
Interceptez l’objet FaultException<TDetail> dans une application cliente Windows Communication Foundation (WCF) pour gérer une erreur SOAP spécifiée contractuellement dans un contrat d’opération.
Les services déployés classiques utilisent le FaultContractAttribute pour spécifier de manière formelle toutes les erreurs SOAP qu'un client peut s'attendre à recevoir dans le cours normal d'une opération. Les informations d’erreur dans un FaultContractAttribute s’affichent sous la forme d’un FaultException<TDetail> (où le typeparameter est l’objet d’erreur sérialisable spécifié dans l’opération de FaultContractAttribute) lorsqu’il arrive à une application cliente. L'FaultContractAttribute peut être utilisé pour spécifier les erreurs SOAP à la fois pour les méthodes de service bidirectionnelles et les paires de méthodes asynchrones.
Étant donné que FaultException<TDetail> est une FaultException et donc également une CommunicationException, assurez-vous que vous interceptez les types FaultException<TDetail> avant les types FaultException et CommunicationException pour intercepter les erreurs SOAP spécifiées ou gérez les exceptions spécifiées dans l'un de ces gestionnaires d'exceptions.
Notes
Si vous utilisez un System.ServiceModel.FaultContractAttribute pour spécifier une FaultException<TDetail> où le paramètre de type est une System.String, la valeur de chaîne est assignée à la propriété Detail dans l’application cliente ; les clients ne peuvent pas récupérer cette chaîne en appelant la méthode FaultException<TDetail>.ToString. Pour que la valeur de chaîne soit retournée lorsque l'application cliente appelle Exception.ToString, levez une exception System.ServiceModel.FaultException dans l'opération et passez la chaîne au constructeur. En général, il est recommandé que les types de détail soient des types sérialisables personnalisés appropriés à l'erreur et pas System.String.
Constructeurs
FaultException<TDetail>(SerializationInfo, StreamingContext) |
Initialise une nouvelle instance de la classe FaultException<TDetail> à l'aide des informations de sérialisation spécifiées et du contexte lors de la désérialisation d'un flux en objet FaultException. |
FaultException<TDetail>(TDetail) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail spécifié. |
FaultException<TDetail>(TDetail, FaultReason) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail et la raison de l'erreur spécifiés. |
FaultException<TDetail>(TDetail, FaultReason, FaultCode) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail, la raison de l'erreur et le code d'erreur spécifiés. |
FaultException<TDetail>(TDetail, FaultReason, FaultCode, String) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail spécifié et les valeurs de la raison de l'erreur SOAP, du code et de l'action. |
FaultException<TDetail>(TDetail, String) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise le détail et la raison de l'erreur spécifiés. |
FaultException<TDetail>(TDetail, String, FaultCode) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail, la raison de l'erreur et le code d'erreur spécifiés. |
FaultException<TDetail>(TDetail, String, FaultCode, String) |
Initialise une nouvelle instance de la classe FaultException<TDetail> qui utilise l'objet de détail spécifié et les valeurs de la raison de l'erreur SOAP, du code et de l'action. |
Propriétés
Action |
Obtient la valeur de l'action SOAP pour le message d'erreur. (Hérité de FaultException) |
Code |
Obtient le code d'erreur pour l'erreur SOAP. (Hérité de FaultException) |
Data |
Obtient une collection de paires clé/valeur qui fournissent des informations définies par l'utilisateur supplémentaires sur l'exception. (Hérité de Exception) |
Detail |
Obtient l'objet qui contient les informations de détail de la condition de l'erreur. |
HelpLink |
Obtient ou définit un lien vers le fichier d'aide associé à cette exception. (Hérité de Exception) |
HResult |
Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique. (Hérité de Exception) |
InnerException |
Obtient l'instance Exception qui a provoqué l'exception actuelle. (Hérité de Exception) |
Message |
Obtient le message pour l'exception. (Hérité de FaultException) |
Reason |
Obtient la FaultReason de l'erreur SOAP. (Hérité de FaultException) |
Source |
Obtient ou définit le nom de l'application ou de l'objet qui est à l'origine de l'erreur. (Hérité de Exception) |
StackTrace |
Obtient une représentation sous forme de chaîne des frames immédiats sur la pile des appels. (Hérité de Exception) |
TargetSite |
Obtient la méthode qui lève l'exception actuelle. (Hérité de Exception) |
Méthodes
CreateMessageFault() |
Crée un objet MessageFault qui peut être utilisé pour créer un Message qui représente l'erreur SOAP. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetBaseException() |
En cas de substitution dans une classe dérivée, retourne la Exception qui est à l'origine d'une ou de plusieurs exceptions ultérieures. (Hérité de Exception) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Obsolète.
Implémentation de la méthode GetObjectData(SerializationInfo, StreamingContext) appelée lorsque l'objet est dans un flux. |
GetObjectData(SerializationInfo, StreamingContext) |
Obsolète.
Implémentation de la méthode GetObjectData(SerializationInfo, StreamingContext) appelée lorsque l'objet est dans un flux. (Hérité de FaultException) |
GetType() |
Obtient le type au moment de l'exécution de l'instance actuelle. (Hérité de Exception) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Retourne une chaîne pour l'objet FaultException<TDetail>. |
Événements
SerializeObjectState |
Obsolète.
Se produit quand une exception est sérialisée pour créer un objet d'état d'exception qui contient des données sérialisées concernant l'exception. (Hérité de Exception) |