(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

FaultContractAttribute-Klasse

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

System.Object
  System.Attribute
    System.ServiceModel.FaultContractAttribute

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

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

Der FaultContractAttribute-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsFaultContractAttributeInitialisiert eine neue Instanz der FaultContractAttribute-Klasse.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsActionRuft die Aktion der SOAP-Fehlernachricht ab, die als Bestandteil des Vorgangsvertrags angegeben wurde, oder legt sie fest.
Öffentliche EigenschaftUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDetailTypeRuft den Typ eines serialisierbaren Objekts ab, das Fehlerinformationen enthält.
Öffentliche EigenschaftHasProtectionLevelRuft einen Wert ab, der angibt, ob der SOAP-Fehlernachricht eine Sicherheitsebene zugewiesen wurde.
Öffentliche EigenschaftUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsNameRuft ab oder legt den Namen der Fehlernachricht in WSDL (Web Services Description Language) fest.
Öffentliche EigenschaftUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsNamespaceRuft den Namespace des SOAP-Fehlers ab oder legt diesen fest.
Öffentliche EigenschaftProtectionLevelGibt die Sicherheitsebene an, die der SOAP-Fehler von der Bindung fordert.
Öffentliche EigenschaftTypeIdBei Implementierung in einer abgeleiteten Klasse wird ein eindeutiger Bezeichner für dieses Attribute abgerufen. (Von Attribute geerbt.)
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEqualsInfrastruktur. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Von Attribute geerbt.)
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeGibt den Hashcode für diese Instanz zurück. (Von Attribute geerbt.)
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeIsDefaultAttributeBeim Überschreiben in einer abgeleiteten Klasse wird angegeben, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist. (Von Attribute geerbt.)
Öffentliche MethodeMatchBeim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Von Attribute geerbt.)
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

  NameBeschreibung
Explizite SchnittstellenimplementierungPrivate Methode_Attribute.GetIDsOfNamesOrdnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_Attribute.GetTypeInfoRuft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_Attribute.GetTypeInfoCountRuft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_Attribute.InvokeStellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von Attribute geerbt.)
Zum Seitenanfang

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.

WarnhinweisVorsicht

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.

HinweisHinweis

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.

HinweisHinweis

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). 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.

HinweisHinweis

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.

Wichtiger HinweisWichtig

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

Daher wird die Festlegung von true für ServiceBehaviorAttribute.IncludeExceptionDetailInFaults oder ServiceDebugBehavior.IncludeExceptionDetailInFaults 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 den 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();
    }
  }
}


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

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

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft