Condividi tramite


FaultException<TDetail> Classe

Definizione

Usato in un'applicazione client per rilevare errori SOAP specificati contrattualmente.

generic <typename TDetail>
public ref class FaultException : System::ServiceModel::FaultException
public class FaultException<TDetail> : System.ServiceModel.FaultException
[System.Serializable]
public class FaultException<TDetail> : System.ServiceModel.FaultException
type FaultException<'Detail> = class
    inherit FaultException
[<System.Serializable>]
type FaultException<'Detail> = class
    inherit FaultException
Public Class FaultException(Of TDetail)
Inherits FaultException

Parametri di tipo

TDetail

Tipo di dettaglio errore serializzabile.

Ereditarietà
Ereditarietà
Derivato
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato come un servizio usa il FaultException<TDetail> tipo per generare un'eccezione gestita che viene convertita nell'errore SOAP specificato da 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

Nell'esempio di codice seguente viene illustrato l'aspetto del codice client quando viene importato dal client usando lo strumento utilità metadati ServiceModel (Svcutil.exe).

Nell'esempio di codice seguente viene illustrato come un client può intercettare il FaultException<TDetail> tipo che rappresenta l'errore SOAP personalizzato specificato nel contratto dell'operazione.

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

Commenti

Intercettare l'oggetto FaultException<TDetail> in un'applicazione client Windows Communication Foundation (WCF) per gestire un errore SOAP specificato contrattualmente in un contratto di operazione.

I servizi distribuiti tipici usano per FaultContractAttribute specificare formalmente tutti gli errori SOAP che un client può aspettarsi di ricevere nel normale corso di un'operazione. Le informazioni sull'errore in un FaultContractAttribute oggetto sono visualizzate come ( FaultException<TDetail> dove typeparameter è l'oggetto errore serializzabile specificato nell'operazione FaultContractAttribute) quando arriva a un'applicazione client. Può FaultContractAttribute essere utilizzato per specificare gli errori SOAP sia per i metodi di servizio bidirezionali che per le coppie di metodi asincroni.

Poiché FaultException<TDetail> è sia un FaultException oggetto che un CommunicationExceptionoggetto , per intercettare gli errori SOAP specificati, assicurarsi di intercettare i FaultException<TDetail> tipi prima dei FaultException tipi e CommunicationException o gestire le eccezioni specificate in uno di questi gestori di eccezioni.

Annotazioni

Se si utilizza System.ServiceModel.FaultContractAttribute per specificare un FaultException<TDetail> oggetto in cui il parametro di tipo è , System.Stringil valore stringa viene assegnato alla Detail proprietà nell'applicazione client. I client non possono recuperare tale stringa chiamando il FaultException<TDetail>.ToString metodo . Per fare in modo che il valore stringa venga restituito quando l'applicazione client chiama Exception.ToString, genera un'eccezione System.ServiceModel.FaultException all'interno dell'operazione e passa la stringa al costruttore. In generale, è consigliabile che i tipi di dettaglio siano tipi serializzabili personalizzati appropriati per l'errore e non un oggetto System.String.

Costruttori

Nome Descrizione
FaultException<TDetail>(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della FaultException<TDetail> classe utilizzando le informazioni di serializzazione e il contesto specificati durante la deserializzazione di un flusso in un FaultException oggetto .

FaultException<TDetail>(TDetail, FaultReason, FaultCode, String)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio specificato e i valori di errore SOAP, codice e azione.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio, il motivo dell'errore e il codice di errore specificati.

FaultException<TDetail>(TDetail, FaultReason)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio e il motivo di errore specificati.

FaultException<TDetail>(TDetail, String, FaultCode, String)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio specificato e i valori di errore SOAP, codice e azione.

FaultException<TDetail>(TDetail, String, FaultCode)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio, il motivo dell'errore e il codice di errore specificati.

FaultException<TDetail>(TDetail, String)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza i dettagli e il motivo dell'errore specificati.

FaultException<TDetail>(TDetail)

Inizializza una nuova istanza della FaultException<TDetail> classe che utilizza l'oggetto dettaglio specificato.

Proprietà

Nome Descrizione
Action

Ottiene il valore dell'azione SOAP per il messaggio di errore.

(Ereditato da FaultException)
Code

Ottiene il codice di errore per l'errore SOAP.

(Ereditato da FaultException)
Data

Ottiene una raccolta di coppie chiave/valore che forniscono informazioni aggiuntive definite dall'utente sull'eccezione.

(Ereditato da Exception)
Detail

Ottiene l'oggetto che contiene le informazioni dettagliate della condizione di errore.

HelpLink

Ottiene o imposta un collegamento al file della Guida associato a questa eccezione.

(Ereditato da Exception)
HResult

Ottiene o imposta HRESULT, valore numerico codificato assegnato a un'eccezione specifica.

(Ereditato da Exception)
InnerException

Ottiene l'istanza Exception che ha causato l'eccezione corrente.

(Ereditato da Exception)
Message

Ottiene il messaggio per l'eccezione.

(Ereditato da FaultException)
Reason

Ottiene l'oggetto FaultReason per l'errore SOAP.

(Ereditato da FaultException)
Source

Ottiene o imposta il nome dell'applicazione o dell'oggetto che causa l'errore.

(Ereditato da Exception)
StackTrace

Ottiene una rappresentazione di stringa dei fotogrammi immediati nello stack di chiamate.

(Ereditato da Exception)
TargetSite

Ottiene il metodo che genera l'eccezione corrente.

(Ereditato da Exception)

Metodi

Nome Descrizione
CreateMessageFault()

Crea un MessageFault oggetto che può essere utilizzato per creare un Message oggetto che rappresenta l'errore SOAP.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetBaseException()

Quando sottoposto a override in una classe derivata, restituisce l'oggetto Exception che rappresenta la causa radice di una o più eccezioni successive.

(Ereditato da Exception)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Implementazione del GetObjectData(SerializationInfo, StreamingContext) metodo chiamato quando l'oggetto viene serializzato in un flusso.

GetType()

Ottiene il tipo di runtime dell'istanza corrente.

(Ereditato da Exception)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa per l'oggetto FaultException<TDetail> .

Eventi

Nome Descrizione
SerializeObjectState
Obsoleti.

Si verifica quando viene serializzata un'eccezione per creare un oggetto stato dell'eccezione contenente dati serializzati sull'eccezione.

(Ereditato da Exception)

Si applica a