Partilhar via


FaultException<TDetail> Classe

Definição

Usado em um aplicativo cliente para detectar 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

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 lançar 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 do 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

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

Os serviços implantados típicos usam para FaultContractAttribute 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. Pode FaultContractAttribute ser usado para especificar falhas SOAP para métodos de serviço bidirecionais e para pares de método assíncrono.

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

Observação

Se você usar System.ServiceModel.FaultContractAttribute para especificar um FaultException<TDetail> local 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 para um System.String.

Construtores

Nome Description
FaultException<TDetail>(SerializationInfo, StreamingContext)

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

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

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

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

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

FaultException<TDetail>(TDetail, FaultReason)

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

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

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

FaultException<TDetail>(TDetail, String, FaultCode)

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

FaultException<TDetail>(TDetail, String)

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

FaultException<TDetail>(TDetail)

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

Propriedades

Nome 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 da falha SOAP.

(Herdado de FaultException)
Data

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

(Herdado de Exception)
Detail

Obtém o objeto que contém as informações detalhadas 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 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

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

(Herdado de FaultException)
Reason

Obtém a FaultReason falha de SOAP.

(Herdado de FaultException)
Source

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

(Herdado de Exception)
StackTrace

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

(Herdado de Exception)
TargetSite

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

(Herdado de Exception)

Métodos

Nome Description
CreateMessageFault()

Cria um MessageFault objeto que pode ser usado para criar um Message que represente 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 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)

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

GetType()

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

(Herdado de Exception)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

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

Eventos

Nome 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