Partilhar via


FaultException<TDetail> Classe

Definição

Usada em um aplicativo cliente para capturar falhas de SOAP especificadas contratualmente.

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

Parâmetros de tipo

TDetail

O tipo de detalhe de erro serializável.

Herança
Herança
Derivado
Atributos

Exemplos

O exemplo de código a seguir mostra como um serviço usa o FaultException<TDetail> tipo para gerar uma exceção gerenciada 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 a seguir mostra a aparência do código do cliente quando importado pelo cliente usando a Ferramenta de Utilitário de Metadados ServiceModel (Svcutil.exe).

O exemplo de código a seguir mostra como um cliente pode capturar 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

Comentários

Capture o FaultException<TDetail> objeto em um aplicativo cliente do WCF (Windows Communication Foundation) para lidar com uma falha SOAP que foi especificada contratualmente em um contrato de operação.

Os serviços implantados típicos usam o FaultContractAttribute para especificar formalmente todas as falhas SOAP que um cliente pode esperar receber no curso normal de uma operação. As informações de erro em um FaultContractAttribute aparecem como um FaultException<TDetail> (em que o typeparameter é o objeto de erro serializável especificado no da FaultContractAttributeoperação ) quando ele chega a um aplicativo cliente. O FaultContractAttribute pode ser usado para especificar falhas SOAP para métodos de serviço bidirecionais e para pares de métodos assíncronos.

Como FaultException<TDetail> é um FaultException e, portanto, um CommunicationException, para capturar falhas SOAP especificadas, certifique-se de capturar os FaultException<TDetail> tipos antes dos FaultException tipos e CommunicationException ou manipular as exceções especificadas em um desses manipuladores de exceção.

Observação

Se você usar System.ServiceModel.FaultContractAttribute para especificar um FaultException<TDetail> em que o parâmetro de tipo é um System.String, o valor da cadeia de caracteres será atribuído à Detail propriedade no aplicativo cliente; os clientes não poderão recuperar essa cadeia de caracteres chamando o FaultException<TDetail>.ToString método . Para que o valor da cadeia de caracteres seja retornado quando o aplicativo cliente chamar Exception.ToString, gere uma System.ServiceModel.FaultException exceção dentro da operação e passe a cadeia de caracteres para o construtor. Em geral, é recomendável que os tipos de detalhes sejam tipos serializáveis personalizados apropriados para a falha e não um System.String.

Construtores

FaultException<TDetail>(SerializationInfo, StreamingContext)

Inicializa uma nova instância da classe FaultException<TDetail>, usando as informações de serialização e de contexto especificadas ao desserializar um fluxo em um objeto FaultException.

FaultException<TDetail>(TDetail)

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

FaultException<TDetail>(TDetail, FaultReason)

Inicializa uma nova instância da classe FaultException<TDetail> que usa o objeto de detalhe e o motivo da falha especificados.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inicializa uma nova instância da classe FaultException<TDetail> que usa o objeto de detalhe, o motivo da falha e o código de falha especificados.

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

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

FaultException<TDetail>(TDetail, String)

Inicializa uma nova instância da classe FaultException<TDetail> que usa o detalhe e o motivo da falha especificados.

FaultException<TDetail>(TDetail, String, FaultCode)

Inicializa uma nova instância da classe FaultException<TDetail> que usa o objeto de detalhe, o motivo da falha e o código de falha especificados.

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

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

Propriedades

Action

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

(Herdado de FaultException)
Code

Obtém o código com falha para a falha de SOAP.

(Herdado de FaultException)
Data

Obtém uma coleção de pares de chave/valor que fornecem informações definidas pelo usuário adicionais sobre a exceção.

(Herdado de Exception)
Detail

Obtém o objeto que contém as informações de detalhe da condição de falha.

HelpLink

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

(Herdado de Exception)
HResult

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

(Herdado de Exception)
InnerException

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

(Herdado de Exception)
Message

Obtém a mensagem para a exceção.

(Herdado de FaultException)
Reason

Obtém o FaultReason para a falha de SOAP.

(Herdado de FaultException)
Source

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

(Herdado de Exception)
StackTrace

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.

(Herdado de Exception)
TargetSite

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

(Herdado de Exception)

Métodos

CreateMessageFault()

Cria um objeto MessageFault 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 substituído em uma classe derivada, retorna a Exception que é a causa raiz de uma ou mais exceções subsequentes.

(Herdado de Exception)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

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

GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

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

(Herdado de FaultException)
GetType()

Obtém o tipo de runtime da instância atual.

(Herdado de Exception)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres para o objeto FaultException<TDetail>.

Eventos

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