Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

FaultException<TDetail>-Klasse

Aktualisiert: November 2007

Wird in einer Clientanwendung verwendet, um vertraglich angegebene SOAP-Fehler abzufangen.

Namespace:  System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)
[SerializableAttribute]
public class FaultException<TDetail> : FaultException

J# unterstützt die Verwendung von generischen APIs, aber nicht die Deklaration von neuen generischen APIs.
JScript unterstützt keine generischen Typen oder Methoden.

Typparameter

TDetail

Der serialisierbare Fehlerdetailtyp.

Fangen Sie das FaultException<TDetail>-Objekt in einer Windows Communication Foundation (WCF)-Clientanwendung ab, um einen SOAP-Fehler zu verarbeiten, der vertraglich in einem Vorgangsvertrag angegeben wurde.

Normal bereitgestellte Dienste verwenden FaultContractAttribute, um alle SOAP-Fehler formal anzugeben, die bei einem Client während des normalen Betriebs eingehen können. Fehlerinformationen in FaultContractAttribute werden beim Eingang in der Clientanwendung als FaultException<TDetail> dargestellt, wobei der Typparameter das im FaultContractAttribute des Vorgangs angegebene Fehlerobjekt ist. Das FaultContractAttribute kann zur Angabe der SOAP-Fehler für bidirektionale Dienstmethoden und für asynchrone Methodenpaare verwendet werden.

Da es sich bei FaultException<TDetail> sowohl um eine FaultException und somit auch um eine CommunicationException handelt, müssen Sie, um bestimmte SOAP-Fehler abzufangen, sicherstellen, dass Sie die FaultException<TDetail>-Typen vor dem FaultException-Typ und dem CommunicationException-Typ abfangen oder dass Sie die angegebenen Ausnahmen mit einem der Ausnahmehandler verarbeiten.

ms576199.alert_note(de-de,VS.90).gifHinweis:

Wenn Sie ein System.ServiceModel.FaultContractAttribute verwenden, um eine FaultException<TDetail> festzulegen, bei der der Typparameter ein System.String ist, wird der Zeichenfolgewert der Detail-Eigenschaft in der Clientanwendung zugeordnet; Clients können diese Zeichenfolge nicht durch Abrufen der FaultException<TDetail>.ToString-Methode abrufen. Damit der Zeichenfolgewert zurückgegeben wird, wenn die Clientanwendung Exception.ToString aufruft, lösen Sie im Vorgang eine System.ServiceModel.FaultException-Ausnahme aus, und übergeben Sie die Zeichenfolge dem Konstruktor. Im Allgemeinen wird empfohlen, dass als Detailtypen benutzerdefinierte serialisierbare und für den Fehler geeignete Typen verwendet werden und keine System.String.

Das folgende Codebeispiel zeigt, wie ein Dienst den FaultException<TDetail>-Typ verwendet, um eine verwaltete Ausnahme auszulösen, die in den vom FaultContractAttribute angegebenen SOAP-Fehler konvertiert wird.

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 rand = new Random(DateTime.Now.Millisecond);
    int test = rand.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
  }
}


Das folgende Codebeispiel zeigt, wie der Clientcode aussieht, wenn er vom Client mithilfe von ServiceModel Metadata Utility-Tool (Svcutil.exe) importiert wird.

Das folgende Codebeispiel zeigt, wie ein Client den FaultException<TDetail>-Typ abfangen kann, der den im Vorgangsvertrag angegebenen benutzerdefinierten SOAP-Fehler darstellt.

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();
    }
  }
}


System.Object
  System.Exception
    System.SystemException
      System.ServiceModel.CommunicationException
        System.ServiceModel.FaultException
          System.ServiceModel.FaultException<TDetail>
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.