FaultException<TDetail> Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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) |