FaultException<TDetail> Classe

Definição

Usado numa aplicação de cliente para detetar falhas SOAP especificadas contratualmente.

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

Parâmetros de Tipo Genérico

TDetail

O tipo de detalhe de erro serializável.

Herança
Herança
Derivado
Atributos

Exemplos

O seguinte exemplo de código mostra como um serviço usa o FaultException<TDetail> tipo para lançar uma exceção gerida que é convertida na falha SOAP especificada pelo 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

O exemplo de código seguinte mostra como o código do cliente se apresenta quando importado pelo cliente usando a Ferramenta Utilitária de Metadados do Modelo de Serviço (Svcutil.exe).

O exemplo de código seguinte mostra como um cliente pode detetar o FaultException<TDetail> tipo que representa a falha SOAP personalizada especificada no contrato de operação.

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

Observações

Apanhe o objeto FaultException<TDetail> numa aplicação cliente Windows Communication Foundation (WCF) para tratar de uma falha SOAP que tenha sido contratualmente especificada num contrato de operação.

Os serviços típicos implementados utilizam o FaultContractAttribute para especificar formalmente todas as falhas SOAP que um cliente pode esperar receber no curso normal de uma operação. A informação de erro em a FaultContractAttribute aparece como a FaultException<TDetail> (onde o parâmetro de tipo é o objeto de erro serializável especificado na operação FaultContractAttribute) quando chega a uma aplicação cliente. Podem FaultContractAttribute ser usados para especificar falhas SOAP tanto para métodos de serviço bidirecionais como para pares de métodos assíncronos.

Como FaultException<TDetail> é tanto a FaultException como um CommunicationException, para detetar falhas SOAP especificadas, certifique-se de que apanha os FaultException<TDetail> tipos antes dos FaultException tipos e CommunicationException ou trata as exceções especificadas num desses tratadores de exceções.

Note

Se usar System.ServiceModel.FaultContractAttribute para especificar um FaultException<TDetail> onde o parâmetro de tipo é a System.String, o valor da cadeia é atribuído à Detail propriedade na aplicação cliente; os clientes não podem recuperar essa cadeia chamando o FaultException<TDetail>.ToString método. Para que o valor da string seja devolvido quando a aplicação cliente chama Exception.ToString, lança uma System.ServiceModel.FaultException exceção dentro da operação e passa a string ao construtor. Em geral, recomenda-se que os tipos de detalhe sejam tipos serializáveis personalizados e adequados à falha e não um System.String.

Construtores

Name Description
FaultException<TDetail>(SerializationInfo, StreamingContext)

Inicializa uma nova instância da FaultException<TDetail> classe usando a informação e o contexto de serialização especificados ao desserializar um fluxo num FaultException objeto.

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

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado, e os valores SOAP de razão, código e ação.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado, razão de falha e código de falha.

FaultException<TDetail>(TDetail, FaultReason)

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado e a razão de falha.

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

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado, e os valores SOAP de razão, código e ação.

FaultException<TDetail>(TDetail, String, FaultCode)

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado, razão de falha e código de falha.

FaultException<TDetail>(TDetail, String)

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o detalhe especificado e a razão de falha.

FaultException<TDetail>(TDetail)

Inicializa uma nova instância da FaultException<TDetail> classe que utiliza o objeto de detalhe especificado.

Propriedades

Name Description
Action

Obtém o valor da ação SOAP para a mensagem de falha.

(Herdado de FaultException)
Code

Obtém o código de falha do SOAP.

(Herdado de FaultException)
Data

Obtém uma coleção de pares chave/valor que fornecem informação adicional definida pelo utilizador sobre a exceção.

(Herdado de Exception)
Detail

Obtém o objeto que contém a informação detalhada da condição da falha.

HelpLink

Obtém ou define um link para o ficheiro de ajuda associado a esta exceção.

(Herdado de Exception)
HResult

Recebe ou define HRESULT, um valor numérico codificado atribuído a uma exceção específica.

(Herdado de Exception)
InnerException

Obtém a Exception instância que causou a exceção atual.

(Herdado de Exception)
Message

Percebe a mensagem da exceção.

(Herdado de FaultException)
Reason

Recebe o FaultReason problema da falha SOAP.

(Herdado de FaultException)
Source

Obtém ou define o nome do aplicativo ou o objeto que causa o erro.

(Herdado de Exception)
StackTrace

Obtém uma representação string dos frames imediatos na stack de chamadas.

(Herdado de Exception)
TargetSite

Obtém o método que lança a exceção atual.

(Herdado de Exception)

Métodos

Name Description
CreateMessageFault()

Cria um MessageFault objeto que pode ser usado para criar um Message que representa a falha SOAP.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetBaseException()

Quando sobrescrito numa classe derivada, devolve o Exception que é a causa raiz de uma ou mais exceções subsequentes.

(Herdado de Exception)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Implementação do GetObjectData(SerializationInfo, StreamingContext) método que é chamado quando o objeto é serializado num fluxo.

GetType()

Obtém o tipo de execução da instância atual.

(Herdado de Exception)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma string para o FaultException<TDetail> objeto.

evento

Name Description
SerializeObjectState
Obsoleto.

Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção.

(Herdado de Exception)

Aplica-se a