FaultException<TDetail> Clase

Definición

Se utiliza en una aplicación cliente para detectar los errores de SOAP especificados contractualmente.

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

El tipo de detalle de error serializable.

Herencia
Herencia
Derivado
Atributos

Ejemplos

El ejemplo de código siguiente muestra cómo utiliza un servicio el tipo FaultException<TDetail> para producir una excepción administrada que se convierte en el error de SOAP especificado por 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

En el ejemplo de código siguiente se muestra el aspecto del código de cliente cuando se importa por el cliente mediante la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe).

El ejemplo de código siguiente muestra cómo un cliente puede detectar el tipo FaultException<TDetail> que representa el error de SOAP personalizado especificado en el contrato de la operación.

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

Comentarios

Capture el FaultException<TDetail> objeto en una aplicación cliente de Windows Communication Foundation (WCF) para controlar un error soap que se ha especificado contractualmente en un contrato de operación.

Los servicios implementados típicos utilizan FaultContractAttribute para especificar formalmente todos los errores de SOAP que un cliente puede esperar recibir en el curso normal de una operación. La información de error de un FaultContractAttribute elemento aparece como ( FaultException<TDetail> donde el typeparameter es el objeto de error serializable especificado en la operación FaultContractAttribute) cuando llega a una aplicación cliente. FaultContractAttribute se puede utilizar para especificar los errores de SOAP para los métodos de servicio bidireccionales y para los pares del método asincrónico.

Dado que FaultException<TDetail> es FaultException y, por consiguiente, CommunicationException, para detectar los errores de SOAP especificados le asegurarán que detecta los tipos FaultException<TDetail> antes de los tipos FaultException y CommunicationException o administra las excepciones especificadas en uno de esos controladores de excepciones.

Nota

Si utiliza System.ServiceModel.FaultContractAttribute para especificar un FaultException<TDetail> donde el parámetro de tipo es un System.String, el valor de la cadena se asignará a la propiedad Detail en la aplicación cliente; los clientes no pueden recuperar la cadena llamando al método FaultException<TDetail>.ToString. Para que se devuelva el valor de la cadena cuando la aplicación cliente llama a Exception.ToString, se inicia una excepción System.ServiceModel.FaultException dentro de la operación y se pasa la cadena al constructor. En general, se recomienda que los tipos de detalle sean tipos serializables personalizados apropiados para el error y no un System.String.

Constructores

FaultException<TDetail>(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase FaultException<TDetail> con los parámetros especificados: la información de serialización y el contexto al deserializar una secuencia en un objeto FaultException.

FaultException<TDetail>(TDetail)

Inicializa una instancia nueva de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado.

FaultException<TDetail>(TDetail, FaultReason)

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado y la razón del error.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado, la razón del error y el código del error.

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

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado, la razón del error de SOAP, el código y los valores de la acción.

FaultException<TDetail>(TDetail, String)

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el detalle especificado y la razón del error.

FaultException<TDetail>(TDetail, String, FaultCode)

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado, la razón del error y el código del error.

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

Inicializa una nueva instancia de la clase FaultException<TDetail> que utiliza el objeto de detalle especificado, la razón del error de SOAP, el código y los valores de la acción.

Propiedades

Action

Obtiene el valor de la acción de SOAP para el mensaje de error.

(Heredado de FaultException)
Code

Obtiene el código de error para el error de SOAP.

(Heredado de FaultException)
Data

Obtiene una colección de pares clave/valor que proporciona información definida por el usuario adicional sobre la excepción.

(Heredado de Exception)
Detail

Obtiene el objeto que contiene la información del detalle de la condición del error.

HelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.

(Heredado de Exception)
HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.

(Heredado de Exception)
InnerException

Obtiene la instancia Exception que produjo la excepción actual.

(Heredado de Exception)
Message

Obtiene el mensaje para la excepción.

(Heredado de FaultException)
Reason

Obtiene FaultReason para el error de SOAP.

(Heredado de FaultException)
Source

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.

(Heredado de Exception)
StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.

(Heredado de Exception)
TargetSite

Obtiene el método que produjo la excepción actual.

(Heredado de Exception)

Métodos

CreateMessageFault()

Crea un objeto MessageFault que se puede utilizar para crear un Message que representa el error de SOAP.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.

(Heredado de Exception)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

Implementación del método GetObjectData(SerializationInfo, StreamingContext) al que se llama cuando el objeto se serializa en un flujo.

GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

Implementación del método GetObjectData(SerializationInfo, StreamingContext) al que se llama cuando el objeto se serializa en un flujo.

(Heredado de FaultException)
GetType()

Obtiene el tipo de tiempo de ejecución de la instancia actual.

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena para el objeto FaultException<TDetail>.

Eventos

SerializeObjectState
Obsoletos.

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.

(Heredado de Exception)

Se aplica a