FaultException<TDetail> Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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) |