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.
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) |