Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

FaultContractAttribute-Klasse

 

Veröffentlicht: Oktober 2016

Gibt einen oder mehrere SOAP-Fehler an, die zurückgegeben werden, wenn bei einem Dienstvorgang ein Verarbeitungsfehler festgestellt werden.

Namespace:   System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

System.Object
  System.Attribute
    System.ServiceModel.FaultContractAttribute

[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = true, 
	Inherited = false)]
public sealed class FaultContractAttribute : Attribute

NameBeschreibung
System_CAPS_pubmethodFaultContractAttribute(Type)

Initialisiert eine neue Instanz der FaultContractAttribute-Klasse.

NameBeschreibung
System_CAPS_pubpropertyAction

Ruft die Aktion der SOAP-Fehlernachricht ab, die als Bestandteil des Vorgangsvertrags angegeben wurde, oder legt sie fest.

System_CAPS_pubpropertyDetailType

Ruft den Typ eines serialisierbaren Objekts ab, das Fehlerinformationen enthält.

System_CAPS_pubpropertyHasProtectionLevel

Ruft einen Wert ab, der angibt, ob der SOAP-Fehlernachricht eine Sicherheitsebene zugewiesen wurde.

System_CAPS_pubpropertyName

Ruft ab oder legt den Namen der Fehlernachricht in WSDL (Web Services Description Language) fest.

System_CAPS_pubpropertyNamespace

Ruft den Namespace des SOAP-Fehlers ab oder legt diesen fest.

System_CAPS_pubpropertyProtectionLevel

Gibt die Sicherheitsebene an, die der SOAP-Fehler von der Bindung fordert.

System_CAPS_pubpropertyTypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für diese Instanz zurück.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodIsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodMatch(Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.(Geerbt von „Attribute“.)

Markieren Sie einen Vorgang mit dem FaultContractAttribute-Attribut, um eine oder mehrere spezifische Ausnahmebedingungen zu deklarieren, die zur WSDL (Web Service Description Language)-Beschreibung des Dienstvorgangs als vom Vorgang zurückgegebene, ausdrückliche SOAP-Fehlernachrichten hinzugefügt werden.

In allen verwalteten Anwendungen werden Verarbeitungsfehler durch Exception-Objekte dargestellt. In SOAP-basierten Anwendungen, wie z. B. Windows Communication Foundation (WCF)-Anwendungen, übermitteln Dienstmethoden Verarbeitungsfehlerinformationen mit SOAP-Fehlernachrichten. Da WCF-Anwendungen unter beiden Fehlersystemtypen ausgeführt werden, müssen alle an den Client zu sendenden verwalteten Ausnahmeinformationen von Ausnahmen in SOAP-Fehler konvertiert werden. Sie können die Standard-Dienstausnahmeverhalten verwenden oder aber ausdrücklich steuern, ob und wie Ausnahmen zu Fehlernachrichten zugewiesen werden. Eine Übersicht über Ausnahme- und SOAP-Fehler in WCF-Anwendungen finden Sie unter Angeben und Behandeln von Fehlern in Verträgen und Diensten.

Nach Möglichkeit sollten Dienstvorgänge den FaultContractAttribute verwenden, um alle SOAP-Fehler formal anzugeben, die bei einem Client während des normalen Betriebs eingehen können. Es wird außerdem empfohlen, dass nur die Informationen, die ein Client erhalten muss, in einem SOAP-Fehler zurückgegeben werden, um die Offenlegung von Informationen möglichst gering zu halten.

  • Mit der Action-Eigenschaft wird die Aktion der Fehlernachricht gesteuert.

  • Mit der DetailType-Eigenschaft wird der Typ des in der Fehlernachricht serialisierten Detailobjekts abgerufen.

  • Die Name-Eigenschaft und die Namespace-Eigenschaft steuern entsprechend den Namen und den Namespace der Fehlernachricht.

  • Der HasProtectionLevel gibt an, ob für die Fehlernachricht eine Sicherheitsebene angegeben wurde, und falls dies der Fall ist, ob die ProtectionLevel-Eigenschaft diese Sicherheitsebene steuert.

System_CAPS_cautionAchtung

Enthält eine Fehlernachricht vertrauliche Informationen oder Informationen, die Sicherheitsprobleme zur Folge haben können, sollte nach Möglichkeit die ProtectionLevel-Eigenschaft festgelegt werden.

Für viele Szenarios reicht es vollkommen aus, ProtectionLevel für Fehlernachrichten auf EncryptAndSign festzulegen. Weitere Informationen finden Sie unter Grundlagen der Schutzebene.

Soll ein angegebener Fehler von einem mit FaultContractAttribute markierten Vorgang zurückgegeben werden, lösen Sie eine FaultException<TDetail> aus (wobei der Typparameter die serialisierbare Fehlerinformation ist), wenn die verwaltete Ausnahme während des Vorgangs auftritt.WCF-Clientanwendungen zeigen den SOAP-Fehler als den Typ an, der auch in der Clientimplementierung ausgelöst wurde, das heißt, als FaultException<TDetail> ((wobei der Typ--Parameter die serialisierbare Fehlerinformation ist). Der FaultContractAttribute kann nur zur Angabe von SOAP-Fehlern für bidirektionale Dienstvorgänge und für asynchrone Vorgangspaare verwendet werden. Unidirektionale Vorgänge unterstützen keine SOAP-Fehler und unterstützen daher auch keinen FaultContractAttribute.

System_CAPS_noteHinweis

Sie können zur Übermittlung von Fehlerinformationen jeden serialisierbaren Typ verwenden. Die einzige Einschränkung in dieser WCF-Version besteht darin, dass in einem FaultContractAttribute angegebene Typen von System.Runtime.Serialization.DataContractSerializer serialisierbar sein müssen. Die Serialisierungsunterstützung, die DataContractSerializer bereitstellt, finden Sie unter Data Contract Serializer.

Um beispielsweise anzugeben, dass Clients einen SOAP-Fehler mit einem Int32 erwarten können, fügen Sie den Typparameter in den FaultContractAttribute Ihrer Dienstmethode ein.

System_CAPS_noteHinweis

In den folgenden Codebeispielen werden die Eigenschaften ProtectionLevel, Name oder Namespace nicht festgelegt.

[OperationContractAttribute]
[FaultContractAttribute(typeof(int))]
int Divide(int arg1, int arg2);

Lösen Sie dann in Ihrer Dienstmethode einen neuen FaultException<TDetail> aus, wobei der Typparameter der Typ ist, der die Fehlerinformationen enthält (im voranstehendem Beispiel einen Int32). Zum Beispiel:

throw new FaultException<int>(4);

Das voranstehende Beispiel ist ein sehr einfaches Beispiel. Nahezu alle Informationen können mit einem System.Int32-Code übergeben werden. Das heißt, dieser Detailtyp ist nicht besonders hilfreich. Üblicherweise geben WCF-Anwendungen SOAP-Fehler mit für die Fehlerinformationsanforderungen des Client spezifischen Detailtypen an. Ein komplexeres Beispiel finden Sie im Beispielabschnitt.

System_CAPS_noteHinweis

Wenn Sie einen FaultException<TDetail> angeben, in dem der Typparameter ein System.String ist, wird der Zeichenfolgenwert der Detaileigenschaft in der Clientanwendung zugewiesen. Clients können diese Zeichenfolge nicht durch Aufruf 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.

Um das Anwendungsverhalten explizit zu steuern, wenn eine Ausnahme oder FaultException<TDetail> ausgelöst wird, implementieren Sie die System.ServiceModel.Dispatcher.IErrorHandler-Schnittstelle auf einem System.ServiceModel.Description.IServiceBehavior, System.ServiceModel.Description.IContractBehavior oder System.ServiceModel.Description.IEndpointBehavior und weisen Sie sie der ChannelDispatcher.ErrorHandlers-Eigenschaft zu. IErrorHandler ermöglicht es Ihnen, explizit zu steuern, welcher SOAP-Fehler generiert wird und ob der Fehler zurück zum Client geschickt wird.

Für ein einfacheres Debuggen legen Sie im Code für den ServiceBehaviorAttribute.IncludeExceptionDetailInFaultstrue fest. Alternativ können Sie den ServiceDebugBehavior.IncludeExceptionDetailInFaults in einer Anwendungskonfigurationsdatei verwenden. Bei Aktivierung gibt der Dienst automatisch Ausnahmeinformationen an den Aufrufer zurück. Diese Fehler erscheinen auf dem Client als FaultException-Ausnahmen.

System_CAPS_importantWichtig

Da mit verwalteten Ausnahmen interne Anwendungsinformationen verfügbar gemacht werden können, kann mit der Festlegung von ServiceBehaviorAttribute.IncludeExceptionDetailInFaults oder ServiceDebugBehavior.IncludeExceptionDetailInFaults auf trueWCF-Clients ermöglicht werden, Informationen über interne Dienstvorgangsausnahmen, einschließlich persönlich identifizierbarer oder anderer vertraulicher Informationen abzurufen.

Daher wird die Festlegung von ServiceBehaviorAttribute.IncludeExceptionDetailInFaults für ServiceDebugBehavior.IncludeExceptionDetailInFaults oder true nur für das vorübergehende Debuggen einer Dienstanwendung empfohlen. Außerdem beinhaltet die WSDL für eine Methode, die nicht behandelte verwaltete Ausnahmen auf diese Weise zurückgibt, keinen Vertrag für die FaultException<TDetail> vom Typ String. Clients müssen auf die Möglichkeit von unbekannten SOAP-Fehlern vorbereitet sein, die an WCF-Clients als System.ServiceModel.FaultException-Objekte zurückgegeben werden, damit sie die Debuginformationen korrekt abrufen können.

Im folgenden Codebeispiel wird veranschaulicht, wie mit dem FaultContractAttribute angegeben werden kann, dass der SampleMethod-Vorgang einen SOAP-Fehler mit dem Detailtyp GreetingFault zurückgeben kann.

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
  }
}

Im folgenden Codebeispiel wird veranschaulicht, dass WCF-Clients von ISampleService diesen SOAP-Fehler als FaultException<TDetail> des Typs GreetingFault betrachten.

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 3.0
Windows Phone Silverlight
Verfügbar seit 7.0

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: