Partager via


FaultException<TDetail> Classe

Définition

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)

S’applique à