FaultException<TDetail> Klasa

Definicja

Używany w aplikacji klienckiej do przechwytywania usterek określonych umownie protokołu SOAP.

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

Parametry typu

TDetail

Typ szczegółów błędu możliwego do serializacji.

Dziedziczenie
Dziedziczenie
Pochodne
Atrybuty

Przykłady

Poniższy przykład kodu pokazuje, jak usługa używa FaultException<TDetail> typu do zgłaszania wyjątku zarządzanego, który jest konwertowany na błąd SOAP określony przez 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

Poniższy przykład kodu pokazuje, jak kod klienta wygląda po zaimportowaniu przez klienta przy użyciu narzędzia ServiceModel Metadata Tool (Svcutil.exe).

Poniższy przykład kodu pokazuje, jak klient może przechwycić FaultException<TDetail> typ reprezentujący niestandardowy błąd protokołu SOAP określony w kontrakcie operacji.

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

Uwagi

Przechwyć FaultException<TDetail> obiekt w aplikacji klienckiej Windows Communication Foundation (WCF) w celu obsługi błędu protokołu SOAP, który został określony umownie w kontrakcie operacji.

Typowe wdrożone usługi używają elementu , FaultContractAttribute aby formalnie określić wszystkie błędy protokołu SOAP, które klient może oczekiwać w normalnym przebiegu operacji. Informacje o błędzie w obiekcie FaultContractAttribute są wyświetlane jako FaultException<TDetail> (gdzie typeparameter jest obiektem błędu z możliwością serializacji określonym w operacji FaultContractAttribute) po nadejściu do aplikacji klienckiej. Element FaultContractAttribute może służyć do określania błędów protokołu SOAP dla obu metod usługi dwukierunkowej i par metod asynchronicznych.

Ponieważ FaultException<TDetail> jest to zarówno FaultException element , jak CommunicationExceptioni , aby przechwycić określone błędy protokołu SOAP, upewnij się, że przechwytujesz FaultException<TDetail> typy przed FaultException typami i CommunicationException lub obsłuż określone wyjątki w jednym z tych programów obsługi wyjątków.

Uwaga

Jeśli używasz System.ServiceModel.FaultContractAttribute polecenia , aby określić FaultException<TDetail> , gdzie parametr typu jest System.String, wartość ciągu jest przypisana do Detail właściwości w aplikacji klienckiej; klienci nie mogą pobrać tego ciągu przez wywołanie FaultException<TDetail>.ToString metody . Aby wartość ciągu została zwrócona, gdy aplikacja kliencka wywołuje Exception.ToStringmetodę System.ServiceModel.FaultException , należy zgłosić wyjątek wewnątrz operacji i przekazać ciąg do konstruktora. Ogólnie rzecz biorąc, zaleca się, aby typy szczegółów są niestandardowymi typami, które można serializować, odpowiednie dla błędu, a nie System.String.

Konstruktory

FaultException<TDetail>(SerializationInfo, StreamingContext)

Inicjuje nowe wystąpienie FaultException<TDetail> klasy przy użyciu określonych informacji o serializacji i kontekstu podczas deserializacji strumienia FaultException do obiektu.

FaultException<TDetail>(TDetail)

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów.

FaultException<TDetail>(TDetail, FaultReason)

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów i przyczyny błędu.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów, przyczyny błędu i kodu błędu.

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

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów oraz przyczyny błędu protokołu SOAP, kodu i wartości akcji.

FaultException<TDetail>(TDetail, String)

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego szczegółu i przyczyny błędu.

FaultException<TDetail>(TDetail, String, FaultCode)

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów, przyczyny błędu i kodu błędu.

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

Inicjuje FaultException<TDetail> nowe wystąpienie klasy, które używa określonego obiektu szczegółów oraz przyczyny błędu protokołu SOAP, kodu i wartości akcji.

Właściwości

Action

Pobiera wartość akcji PROTOKOŁU SOAP dla komunikatu o błędzie.

(Odziedziczone po FaultException)
Code

Pobiera kod błędu błędu protokołu SOAP.

(Odziedziczone po FaultException)
Data

Pobiera kolekcję par klucz/wartość, które zapewniają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.

(Odziedziczone po Exception)
Detail

Pobiera obiekt zawierający szczegółowe informacje o warunku błędu.

HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia HRESULT, zakodowaną wartość liczbową przypisaną do określonego wyjątku.

(Odziedziczone po Exception)
InnerException

Exception Pobiera wystąpienie, które spowodowało bieżący wyjątek.

(Odziedziczone po Exception)
Message

Pobiera komunikat dla wyjątku.

(Odziedziczone po FaultException)
Reason

Pobiera błąd FaultReason protokołu SOAP.

(Odziedziczone po FaultException)
Source

Pobiera lub ustawia nazwę aplikacji lub obiektu, który powoduje błąd.

(Odziedziczone po Exception)
StackTrace

Pobiera reprezentację ciągu natychmiastowych ramek na stosie wywołań.

(Odziedziczone po Exception)
TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.

(Odziedziczone po Exception)

Metody

CreateMessageFault()

MessageFault Tworzy obiekt, który może służyć do utworzenia obiektu Message reprezentującego błąd protokołu SOAP.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetBaseException()

Po przesłonięciu w klasie pochodnej funkcja zwraca Exception główną przyczynę co najmniej jednego kolejnego wyjątku.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)
Przestarzałe.

Implementacja GetObjectData(SerializationInfo, StreamingContext) metody, która jest wywoływana, gdy obiekt jest serializowany do strumienia.

GetObjectData(SerializationInfo, StreamingContext)
Przestarzałe.

Implementacja GetObjectData(SerializationInfo, StreamingContext) metody, która jest wywoływana, gdy obiekt jest serializowany do strumienia.

(Odziedziczone po FaultException)
GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg dla FaultException<TDetail> obiektu .

Zdarzenia

SerializeObjectState
Przestarzałe.

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.

(Odziedziczone po Exception)

Dotyczy