Jazyk

FaultException<TDetail> Třída

Definice

Používá se v klientské aplikaci k zachycení smluvně zadaných chyb SOAP.

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

Parametry typu

TDetail

Typ podrobností o serializovatelné chybě.

Dědičnost
Dědičnost
Odvozené
Atributy

Příklady

Následující příklad kódu ukazuje, jak služba používá FaultException<TDetail> typ k vyvolání spravované výjimky, která se převede na chybu SOAP určenou 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

Následující příklad kódu ukazuje, jak vypadá klientský kód při importu klienta pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe).

Následující příklad kódu ukazuje, jak klient může zachytit FaultException<TDetail> typ, který představuje vlastní chybu SOAP zadanou v kontraktu operace.

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

Poznámky

FaultException<TDetail> Zachyťte objekt v klientské aplikaci WCF (Windows Communication Foundation) pro zpracování chyby PROTOKOLU SOAP, která byla smluvně zadána v kontraktu operace.

Typické nasazené služby používají FaultContractAttribute k formálnímu určení všech chyb PROTOKOLU SOAP, které klient může očekávat v normálním průběhu operace. Informace o chybě v objektu FaultContractAttribute se zobrazí jako FaultException<TDetail> (kde typeparameter je serializovatelný objekt chyby zadaný v operaci FaultContractAttribute) při příchodu do klientské aplikace. Dá FaultContractAttribute se použít k určení chyb PROTOKOLU SOAP pro obousměrné metody služby i pro páry asynchronních metod.

Vzhledem k tomu FaultException<TDetail> , že je to jak , FaultException tak CommunicationExceptioni , zachytit zadané chyby SOAP ujistěte se, že jste zachytáli FaultException<TDetail> typy před FaultException a typy nebo CommunicationException zpracovat zadané výjimky v jednom z těchto obslužných rutin výjimek.

Note

Pokud použijete System.ServiceModel.FaultContractAttribute k určení FaultException<TDetail> , kde je System.Stringparametr typu , je řetězcová hodnota přiřazena vlastnosti Detail v klientské aplikaci; klienti nemohou tento řetězec načíst voláním FaultException<TDetail>.ToString metody. Chcete-li, aby se řetězcová hodnota vrátila při volání Exception.ToStringklientské aplikace , vyvolá System.ServiceModel.FaultException výjimku uvnitř operace a předejte řetězec konstruktoru. Obecně se doporučuje, aby podrobné typy byly vlastní serializovatelné typy vhodné pro chybu, a nikoli System.String.

Konstruktory

Name Description
FaultException<TDetail>(SerializationInfo, StreamingContext)

Inicializuje novou instanci FaultException<TDetail> třídy pomocí zadaných serializačních informací a kontextu při deserializaci datového proudu do objektu FaultException .

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

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný objekt podrobností a důvod chyby SOAP, kód a akční hodnoty.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt, důvod chyby a kód chyby.

FaultException<TDetail>(TDetail, FaultReason)

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objektu a důvodu chyby.

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

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný objekt podrobností a důvod chyby SOAP, kód a akční hodnoty.

FaultException<TDetail>(TDetail, String, FaultCode)

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt, důvod chyby a kód chyby.

FaultException<TDetail>(TDetail, String)

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail a důvod chyby.

FaultException<TDetail>(TDetail)

Inicializuje novou instanci FaultException<TDetail> třídy, která používá zadaný detail objekt.

Vlastnosti

Name Description
Action

Získá hodnotu akce SOAP pro chybovou zprávu.

(Zděděno od FaultException)
Code

Získá kód chyby pro chybu SOAP.

(Zděděno od FaultException)
Data

Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce.

(Zděděno od Exception)
Detail

Získá objekt, který obsahuje podrobné informace o stavu chyby.

HelpLink

Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce.

(Zděděno od Exception)
HResult

Získá nebo nastaví HRESULT, kódovanou číselnou hodnotu, která je přiřazena ke konkrétní výjimce.

(Zděděno od Exception)
InnerException

Exception Získá instanci, která způsobila aktuální výjimku.

(Zděděno od Exception)
Message

Získá zprávu pro výjimku.

(Zděděno od FaultException)
Reason

FaultReason Získá chybu SOAP.

(Zděděno od FaultException)
Source

Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu.

(Zděděno od Exception)
StackTrace

Získá řetězcové znázornění okamžitých rámců v zásobníku volání.

(Zděděno od Exception)
TargetSite

Získá metodu, která vyvolá aktuální výjimku.

(Zděděno od Exception)

Metody

Name Description
CreateMessageFault()

Vytvoří MessageFault objekt, který lze použít k vytvoření Message , který představuje chybu SOAP.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetBaseException()

Při přepsání v odvozené třídě vrátí Exception to, že je původní příčinou jedné nebo více následných výjimek.

(Zděděno od Exception)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetObjectData(SerializationInfo, StreamingContext)

GetObjectData(SerializationInfo, StreamingContext) Implementace metody, která je volána při serializaci objektu do datového proudu.

GetType()

Získá typ modulu runtime aktuální instance.

(Zděděno od Exception)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec objektu FaultException<TDetail> .

Událost

Name Description
SerializeObjectState
Zastaralé.

Nastane, když je výjimka serializována vytvořit objekt stavu výjimky, který obsahuje serializovaná data o výjimce.

(Zděděno od Exception)

Platí pro