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

ServiceContractAttribute-Klasse

 

Veröffentlicht: Oktober 2016

Gibt an, dass eine Schnittstelle oder eine Klasse einen Dienstvertrag in einer Windows Communication Foundation (WCF)-Anwendung definiert.

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

System.Object
  System.Attribute
    System.ServiceModel.ServiceContractAttribute

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Interface, 
	Inherited = false, AllowMultiple = false)]
public sealed class ServiceContractAttribute : Attribute

NameBeschreibung
System_CAPS_pubmethodServiceContractAttribute()

Initialisiert eine neue Instanz der ServiceContractAttribute-Klasse.

NameBeschreibung
System_CAPS_pubpropertyCallbackContract

Ruft den Typ des Rückrufvertrags ab oder legt ihn fest, wenn es sich beim Vertrag um einen Duplexvertrag handelt.

System_CAPS_pubpropertyConfigurationName

Ruft den Namen ab, mit dem der Dienst in einer Anwendungskonfigurationsdatei gesucht wird, oder legt ihn fest.

System_CAPS_pubpropertyHasProtectionLevel

Ruft einen Wert ab, der angibt, ob dem Member eine Schutzebene zugewiesen wurde.

System_CAPS_pubpropertyName

Ruft den Namen für das <portType>-Element in Web Services Description Language (WSDL) ab oder legt ihn fest.

System_CAPS_pubpropertyNamespace

Ruft den Namespace des <portType>-Elements in Web Services Description Language (WSDL) ab oder legt ihn fest.

System_CAPS_pubpropertyProtectionLevel

Gibt an, ob die Bindung für den Vertrag den Wert der ProtectionLevel-Eigenschaft unterstützen muss.

System_CAPS_pubpropertySessionMode

Ruft ab, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind, oder legt dies fest.

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

Verwenden Sie das ServiceContractAttribute-Attribut in einer Schnittstelle (oder Klasse), um einen Dienstvertrag zu definieren. Verwenden Sie dann das OperationContractAttribute-Attribut in einer oder mehreren Klassenmethoden (oder Schnittstellenmethoden), um die Dienstvertragvorgänge zu definieren. Wenn der Dienstvertrag implementiert und mit einer Windows Communication Foundation-Bindungen und einem EndpointAddress-Objekt kombiniert wird, wird der Dienstvertrag für die Verwendung durch Clients verfügbar gemacht. Eine Übersicht über den Prozess mit einfachen Beispielen finden Sie unter Lernprogramm 'Erste Schritte'. Weitere Informationen zum Erstellen von Dienstverträgen finden Sie unter Entwerfen und Implementieren von Diensten.

Die von einem ServiceContractAttribute wiedergegebenen Informationen und seine Schnittstelle hängen lose mit dem Web Services Description Language (WSDL)-<portType>-Element zusammen. Ein Dienstvertrag wird auf Dienstseite verwendet, um anzugeben, was der Dienstendpunkt für die Aufrufer verfügbar macht. Er wird außerdem auf Clientseite verwendet, um den Vertrag des Endpunkts anzugeben, mit dem der Client kommuniziert, und um im Fall von Duplexverträgen den Rückrufvertrag anzugeben (unter Verwendung der CallbackContract-Eigenschaft), den der Client implementieren muss, um an einer Duplexkonversation teilzunehmen.

System_CAPS_noteHinweis

Eine Schnittstelle oder Klasse, der ServiceContractAttribute zugeordnet ist, muss mindestens eine Methode aufweisen, die mit dem OperationContractAttribute-Attribut markiert ist, um Funktionen bereitstellen zu können. Im Beispielabschnitt finden Sie ein Codebeispiel, in dem die beiden Attribute auf einfache Weise zum Definieren und Implementieren eines Diensts eingesetzt werden.

Verwenden Sie die ServiceContractAttribute-Eigenschaften, um den Dienstvertrag zu ändern.

  • Die ConfigurationName-Eigenschaft gibt den Namen des Dienstelements in der zu verwendenden Konfigurationsdatei an.

  • Die Name-Eigenschaft und die Namespace-Eigenschaft steuern den Namen und den Namespace des Vertrags im WSDL-<portType>-Element.

  • Die SessionMode-Eigenschaft gibt an, ob der Vertrag eine Bindung erfordert, die Sitzungen unterstützt.

  • Die CallbackContract-Eigenschaft gibt den Rückgabevertrag in einer bidirektionalen (Duplex-) Konversation an.

  • Die HasProtectionLevel-Eigenschaft und die ProtectionLevel-Eigenschaft geben an, ob alle den Vertrag unterstützenden Nachrichten einen expliziten ProtectionLevel-Wert haben, und wenn ja, welcher Stufe sie angehören.

Dienste implementieren Dienstverträge, die den von einem Diensttyp unterstützten Datenaustausch darstellen. Eine Dienstklasse kann einen Dienstvertrag implementieren (durch Implementierung einer mit ServiceContractAttribute markierten Schnittstelle, die Methoden aufweist, die mit OperationContractAttribute markiert sind), oder sie kann mit ServiceContractAttribute markiert werden und das OperationContractAttribute-Attribut auf seine eigenen Methoden anwenden. (Wenn eine Klasse eine mit ServiceContractAttribute markierte Schnittstelle implementiert, kann sie nicht ihrerseits mit ServiceContractAttribute markiert sein.) Methoden für Diensttypen, die mit OperationContractAttribute markiert sind, werden als Teil eines vom Diensttypen selbst angegebenen Standarddienstvertrags behandelt. Einzelheiten zu Dienstvorgängen finden Sie unter OperationContractAttribute.

Standardmäßig sind die Name-Eigenschaft und die Namespace-Eigenschaft der Name des Vertragstyps bzw. http://tempuri.org, und ProtectionLevel ist ProtectionLevel.None. Es wird empfohlen, dass Dienstverträge ihre Namen, Namespaces und Schutzebenen explizit mit diesen Eigenschaften festlegen. Dadurch können zwei Ziele erreicht werden. Erstens wird dabei ein Vertrag erstellt, der nicht direkt mit den Informationen zum verwalteten Typ verbunden ist und es Ihnen dadurch ermöglicht, Ihren verwalteten Code und Ihre verwalteten Namespaces umzugestalten, ohne den in WSDL angegebenen Vertrag zu brechen. Zweitens wird der Laufzeit durch die explizite Anforderung einer bestimmten Schutzebene beim Vertrag selbst ermöglicht zu prüfen, ob die Bindungskonfiguration diese Sicherheitsebene unterstützt, wodurch verhindert wird, dass durch eine unzureichende Konfiguration vertrauliche Informationen weitergegeben werden. Weitere Informationen zu Schutzebenen finden Sie unter Grundlagen der Schutzebene.

Um einen Dienst für die Verwendung durch Clientanwendungen verfügbar zu machen, müssen Sie eine Hostanwendung erstellen, um den Dienstendpunkt mithilfe von Windows Communication Foundation (WCF) zu registrieren. Sie können WCF-Dienste mithilfe von Windows Activation Services (WAS) in Konsolenanwendungen, Windows-Dienstanwendungen, ASP.NET-Anwendungen, Windows Forms-Anwendungen oder anderen Anwendungsdomänen hosten.

Das Hosten in WAS ähnelt stark dem Erstellen einer ASP.NET-Anwendung. Ausführliche Informationen finden Sie unter Gewusst wie: Hosten eines WCF-Diensts in IIS.

Clients verwenden entweder die Dienstvertragsschnittstelle (die mit ServiceContractAttribute markierte Schnittstelle), um einen Kanal für den Dienst zu erstellen, oder sie verwenden die Clientobjekte (die die Typinformationen der Dienstvertragsschnittstelle mit der ClientBase<TChannel>-Klasse kombinieren), um mit dem Dienst zu kommunizieren. Einzelheiten zu Clientkanälen für Dienste erfahren Sie in den Informationen zur ChannelFactory<TChannel>-Klasse und unter Übersicht über den WCF-Client.

Durch Verwendung einer ServiceContractAttribute-Klasse oder -Schnittstelle zum Erben von einer anderen ServiceContractAttribute-Klasse oder -Schnittstelle wird der übergeordnete Vertrag erweitert. Wenn z.&#160;B. eine IChildContract-Schnittstelle mit ServiceContractAttribute markiert ist und von der Dienstvertragsschnittstelle IParentContracterbt, enthält der IChildContract-Dienstvertrag die Methoden von IParentContract und IChildContract. Das Erweitern von Verträgen (ob für Klassen oder Schnittstellen) ähnelt stark dem Erweitern verwalteter Klassen und Schnittstellen.

Die flexibelste Herangehensweise an das Erstellen von Diensten ist die Definition von Dienstvertragsschnittstellen und die anschließende Implementierung dieser Schnittstellen durch die Dienstklasse. (Dies ist auch der einfachste Weg, Dienste zu erstellen, wenn Sie Dienstverträge implementieren müssen, die von anderen definiert wurden.) Das direkte Erstellen von Diensten durch das Markieren einer Klasse mit ServiceContractAttribute und ihrer Methoden mit OperationContractAttribute funktioniert, wenn der Dienst nur einen Vertrag verfügbar macht (aber dieser Vertrag kann durch mehr als einen Endpunkt verfügbar gemacht werden).

Verwenden Sie die CallbackContract-Eigenschaft, um einen anderen Dienstvertrag anzugeben, der bei Zusammenfassung mit dem ursprünglichen Dienstvertrag einen Nachrichtenaustausch definiert, der sich unabhängig in zwei Richtungen bewegen kann. Ausführliche Informationen finden Sie unter CallbackContract.

Im folgenden Codebeispiel wird gezeigt, wie ServiceContractAttribute auf eine Schnittstelle angewendet wird, um einen Dienstvertrag mit einer Dienstmethode zu definieren, die durch OperationContractAttribute angegeben wird. In diesem Fall ist die erforderliche Schutzebene der Bindungen für alle Nachrichten ProtectionLevel.EncryptAndSign.

Im Codebeispiel wird dieser Vertrag dann über die SampleService-Klasse implementiert.

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    Name="SampleService",
    ProtectionLevel=ProtectionLevel.EncryptAndSign
  )]
  public interface ISampleService{
    [OperationContract]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
 	  return "The service greets you: " + msg;
  }

  #endregion
  }
}

Im folgenden Codebeispiel wird eine einfache Konfigurationsdatei für den vorangehenden Dienst gezeigt, die einen Endpunkt erstellt.

Im folgenden Codebeispiel wird ein einfacher Client gezeigt, der den vorangehenden SampleService aufruft.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

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);
      wcfClient.Abort();
      Console.Read();
    }
    catch(CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
  }
}

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 2.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: