FaultException<TDetail> Klass

Definition

Används i ett klientprogram för att fånga avtalsenligt angivna SOAP-fel.

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

Typparametrar

TDetail

Den serialiserbara felinformationstypen.

Arv
Arv
Härledda
Attribut

Exempel

Följande kodexempel visar hur en tjänst använder FaultException<TDetail> typen för att utlösa ett hanterat undantag som konverteras till SOAP-felet som anges av 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

Följande kodexempel visar hur klientkoden ser ut när den importeras av klienten med hjälp av Verktyget för ServiceModel-metadata (Svcutil.exe).

Följande kodexempel visar hur en klient kan fånga den FaultException<TDetail> typ som representerar det anpassade SOAP-fel som anges i åtgärdskontraktet.

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

Kommentarer

Fånga FaultException<TDetail>-objektet i ett Windows Communication Foundation-klientprogram (WCF) för att hantera ett SOAP-fel som har angetts enligt avtal i ett åtgärdskontrakt.

Typiska distribuerade tjänster använder FaultContractAttribute för att formellt ange alla SOAP-fel som en klient kan förvänta sig att ta emot under en normal åtgärd. Felinformation i en FaultContractAttribute visas som en FaultException<TDetail> (där typeparametern är det serialiserbara felobjektet som anges i åtgärdens FaultContractAttribute) när det kommer till ett klientprogram. FaultContractAttribute Kan användas för att ange SOAP-fel för både tvåvägstjänstmetoder och för asynkrona metodpar.

Eftersom FaultException<TDetail> är både en FaultException och därför en CommunicationException, för att fånga angivna SOAP-fel kontrollerar du att FaultException du fångar typerna FaultException<TDetail> före och CommunicationException skriver eller hanterar de angivna undantagen i någon av dessa undantagshanterare.

Note

Om du använder System.ServiceModel.FaultContractAttribute för att ange en FaultException<TDetail> där typparametern är en System.Stringtilldelas strängvärdet till Detail egenskapen i klientprogrammet. Klienter kan inte hämta strängen FaultException<TDetail>.ToString genom att anropa metoden. Om du vill att strängvärdet ska returneras när klientprogrammet anropar Exception.ToStringgenererar du ett System.ServiceModel.FaultException undantag i åtgärden och skickar strängen till konstruktorn. I allmänhet rekommenderar vi att detaljtyper är anpassade serialiserbara typer som är lämpliga för felet och inte en System.String.

Konstruktorer

Name Description
FaultException<TDetail>(SerializationInfo, StreamingContext)

Initierar en ny instans av FaultException<TDetail> klassen med den angivna serialiseringsinformationen och kontexten när en ström deserialiseras till ett FaultException objekt.

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

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och SOAP-felorsaks-, kod- och åtgärdsvärden.

FaultException<TDetail>(TDetail, FaultReason, FaultCode)

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet, felorsaken och felkoden.

FaultException<TDetail>(TDetail, FaultReason)

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och felorsaken.

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

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet och SOAP-felorsaks-, kod- och åtgärdsvärden.

FaultException<TDetail>(TDetail, String, FaultCode)

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet, felorsaken och felkoden.

FaultException<TDetail>(TDetail, String)

Initierar en ny instans av FaultException<TDetail> klassen som använder den angivna informationen och felorsaken.

FaultException<TDetail>(TDetail)

Initierar en ny instans av FaultException<TDetail> klassen som använder det angivna detaljobjektet.

Egenskaper

Name Description
Action

Hämtar värdet för SOAP-åtgärden för felmeddelandet.

(Ärvd från FaultException)
Code

Hämtar felkoden för SOAP-felet.

(Ärvd från FaultException)
Data

Hämtar en samling nyckel/värde-par som ger ytterligare användardefinierad information om undantaget.

(Ärvd från Exception)
Detail

Hämtar objektet som innehåller information om feltillståndet.

HelpLink

Hämtar eller anger en länk till hjälpfilen som är associerad med det här undantaget.

(Ärvd från Exception)
HResult

Hämtar eller anger HRESULT, ett kodat numeriskt värde som har tilldelats ett specifikt undantag.

(Ärvd från Exception)
InnerException

Hämtar den Exception instans som orsakade det aktuella undantaget.

(Ärvd från Exception)
Message

Hämtar meddelandet för undantaget.

(Ärvd från FaultException)
Reason

FaultReason Hämtar för SOAP-felet.

(Ärvd från FaultException)
Source

Hämtar eller anger namnet på programmet eller objektet som orsakar felet.

(Ärvd från Exception)
StackTrace

Hämtar en strängrepresentation av de omedelbara ramarna i anropsstacken.

(Ärvd från Exception)
TargetSite

Hämtar den metod som utlöser det aktuella undantaget.

(Ärvd från Exception)

Metoder

Name Description
CreateMessageFault()

Skapar ett MessageFault objekt som kan användas för att skapa ett Message som representerar SOAP-felet.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetBaseException()

När den åsidosätts i en härledd klass returnerar den Exception som är rotorsaken till ett eller flera efterföljande undantag.

(Ärvd från Exception)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetObjectData(SerializationInfo, StreamingContext)

Implementering av metoden GetObjectData(SerializationInfo, StreamingContext) som anropas när objektet serialiseras till en dataström.

GetType()

Hämtar körningstypen för den aktuella instansen.

(Ärvd från Exception)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng för FaultException<TDetail> objektet.

Händelser

Name Description
SerializeObjectState

Inträffar när ett undantag serialiseras för att skapa ett undantagstillståndsobjekt som innehåller serialiserade data om undantaget.

(Ärvd från Exception)

Gäller för