Teilen über


OperationContractAttribute Klasse

Definition

Gibt an, dass eine Methode einen Vorgang definiert, der Bestandteil eines Dienstvertrags in einer Windows Communication Foundation-Anwendung (WCF) ist.

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationContractAttribute = class
    inherit Attribute
Public NotInheritable Class OperationContractAttribute
Inherits Attribute
Vererbung
OperationContractAttribute
Attribute

Beispiele

Im folgenden Codebeispiel ist ein einfacher Dienstvertrag mit einem Vorgang dargestellt.

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

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    // This operation specifies an explicit protection level requirement.
    [OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Called with: {0}", msg);
      return "The service greets you: " + msg;
  }

  #endregion
  }
}
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="Microsoft.WCF.Documentation")> _
  Public Interface ISampleService
    ' This operation specifies an explicit protection level requirement.
    <OperationContract(ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("Called with: {0}", msg)
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

Das folgende Beispiel enthält einen Dienst, der einen impliziten Dienstvertrag implementiert, mit dem drei Vorgänge angegeben werden. Zwei der Vorgänge sind bidirektionale Vorgänge, die zugrunde liegende Antworten an den Aufrufer zurückgeben, und zwar unabhängig davon, wie der Rückgabewert lautet. Der dritte Vorgang empfängt einen Aufruf, eine zugrunde liegende eingehende Nachricht, gibt aber keine zugrunde liegende Antwortnachricht zurück.

[ServiceContractAttribute]  
public class OneAndTwoWay  
{  
  // The client waits until a response message appears.  
  [OperationContractAttribute]  
  public int MethodOne (int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  // The client waits until an empty response message appears.  
  [OperationContractAttribute]  
  public void MethodTwo (int x)  
  {  
    return;  
  }  

  // The client returns as soon as an outbound message  
  // is dispatched to the service; no response  
  // message is generated or sent from the service.  
  [OperationContractAttribute(IsOneWay=true)]  
  public void MethodThree (int x)  
  {  
    return;  
  }  
}  

Hinweise

Wenden Sie den OperationContractAttribute auf eine Methode an, um anzugeben, dass mit einer Methode ein Dienstvorgang als Bestandteil eines Dienstvertrags (angegeben mit einem ServiceContractAttribute-Attribut) implementiert wird.

Verwenden Sie die OperationContractAttribute-Eigenschaften, um die Struktur des Vorgangs und die in Metadaten ausgedrückten Werte zu steuern:

  • Die Action-Eigenschaft gibt die Aktion an, die diesen Vorgang eindeutig identifiziert. WCF sendet Anforderungsmeldungen basierend auf ihrer Aktion an Methoden.

  • Mit der AsyncPattern-Eigenschaft wird angegeben, dass der Vorgang implementiert wird oder asynchron mit einem Begin/End-Methodenpaar aufgerufen werden kann.

  • Die HasProtectionLevel-Eigenschaft gibt an, ob die ProtectionLevel-Eigenschaft ausdrücklich festgelegt wurde.

  • Die IsOneWay-Eigenschaft gibt an, dass der Vorgang nur aus einer einzelnen Eingabenachricht besteht. Der Vorgang verfügt über keine zugeordnete Ausgabenachricht.

  • Die IsInitiating-Eigenschaft gibt an, ob dieser Vorgang der anfängliche Vorgang in einer Sitzung sein kann.

  • Die IsTerminating -Eigenschaft gibt an, ob WCF versucht, die aktuelle Sitzung nach Abschluss des Vorgangs zu beenden.

  • Die ProtectionLevel-Eigenschaft gibt die Sicherheit auf Nachrichtenebene an, die ein Vorgang während der Laufzeit erfordert.

  • Die ReplyAction-Eigenschaft gibt die Aktion der Antwortnachricht für den Vorgang an.

Das OperationContractAttribute-Attribut deklariert, dass eine Methode ein Vorgang in einem Dienstvertrag ist. Nur Methoden, die dem OperationContractAttribute attributiert werden, werden als Dienstvorgänge verfügbar gemacht. Mit einem Dienstvertrag ohne mit OperationContractAttribute markierte Methoden werden keine Vorgänge verfügbar gemacht.

Die AsyncPattern -Eigenschaft gibt an, dass ein Paar der<BeginMethoden methodName> und End<methodName> einen einzelnen Vorgang bilden, der asynchron implementiert wird (ob auf dem Client oder im Dienst). Die Fähigkeit eines Diensts, Vorgänge asynchron zu implementieren, ist ein Dienstimplementierungsdetail und wird nicht in den Metadaten (wie z. B. WSDL (Web Services Description Language)) verfügbar gemacht.

Ähnlich können Clients Vorgänge unabhängig von der Implementierung der Dienstmethode asynchron aufrufen. Der asynchrone Aufruf von Dienstvorgängen auf dem Client wird empfohlen, wenn eine Dienstmethode einige Zeit beansprucht, jedoch Informationen direkt an den Client zurückgeben muss. Ausführliche Informationen finden Sie unter AsyncPattern.

Die IsOneWay-Eigenschaft gibt an, dass eine Methode überhaupt keinen Wert zurückgibt. Dies bezieht sich auch auf eine leere zugrunde liegende Antwortnachricht. Dieser Methodentyp ist für Benachrichtigungen oder ereignisbezogene Kommunikation nützlich. Methoden dieser Art können keine Antwortnachricht zurückgeben. Folglich muss die Deklaration der Methode void zurückgeben.

Wichtig

Verwenden Sie beim programmgesteuerten Abrufen des Informationsspeichers in diesem Attribut die ContractDescription -Klasse anstelle der Reflektion.

Hinweis

Wenn für die IsOneWay-Eigenschaft false festgelegt wird (Standardeinstellung), liegen auch bei Methoden, die void zurückgeben, bidirektionale Methoden auf der zugrunde liegenden Nachrichtenebene vor. In diesem Fall erstellt und sendet die Infrastruktur eine leere Nachricht, um dem Aufrufer mitzuteilen, dass die Methode einen Wert zurückgegeben hat. Mit dieser Vorgehensweise können die Anwendung und die Infrastruktur Fehlerinformationen (wie z. B. einen SOAP-Fehler) an den Client zurücksenden. Die Festlegung von IsOneWay auf true ist die einzige Möglichkeit, die Erstellung und Versendung einer Antwortnachricht zu verhindern. Weitere Informationen finden Sie unter Unidirektionale Dienste.

Mit der Action-Eigenschaft und der ReplyAction-Eigenschaft können nicht nur die Standardaktion von SOAP-Nachrichten geändert werden, sondern können auch Handler für unerkannte Nachrichten erstellt oder das Hinzufügen von Aktionen für die direkte Nachrichtenprogrammierung deaktiviert werden. Verhindern Sie mit der IsInitiating-Eigenschaft, dass Clients vor anderen Vorgängen einen besonderen Dienstvorgang aufrufen. Verwenden Sie die IsTerminating -Eigenschaft, damit WCF den Kanal schließt, nachdem Clients einen bestimmten Dienstvorgang aufgerufen haben. Weitere Informationen finden Sie unter Verwenden von Sitzungen.

Mit der ProtectionLevel-Eigenschaft können Sie für den Dienstvertrag angeben, ob die Vorgangsnachrichten signiert, verschlüsselt oder signiert und verschlüsselt werden sollen. Kann von einer Bindung die vom Vertrag geforderte Sicherheitsebene nicht bereitgestellt werden, wird während der Laufzeit eine Ausnahme ausgelöst. Weitere Informationen finden Sie unter ProtectionLevel und Grundlegendes zur Schutzebene.

Konstruktoren

OperationContractAttribute()

Initialisiert eine neue Instanz der OperationContractAttribute-Klasse.

Eigenschaften

Action

Ruft ab oder legt die WS-Adressierungsaktion der Anforderungsnachricht fest.

AsyncPattern

Gib an, dass ein Vorgang mit dem Methodenpaar Begin<Methodenname> und End<Methodenname> in einem Dienstvertrag asynchron implementiert wird.

HasProtectionLevel

Ruft einen Wert ab, der angibt, ob die Nachrichten für diesen Vorgang verschlüsselt oder signiert werden müssen oder beides.

IsInitiating

Ruft einen Wert ab, der angibt, ob die Methode einen Vorgang implementiert, der eine Sitzung auf dem Server initiieren kann (wenn eine solche Sitzung vorhanden ist), oder legt diesen fest.

IsOneWay

Ruft einen Wert ab, der angibt, ob ein Vorgang eine Antwortnachricht zurückgibt, oder legt diesen fest.

IsTerminating

Ruft einen Wert ab, der angibt, ob der Dienstvorgang bewirkt, dass der Server die Sitzung schließt, nachdem die Antwortnachricht gesendet wurde.

Name

Ruft den Namen des Vorgangs ab oder legt ihn fest.

ProtectionLevel

Ruft einen Wert ab, der angibt, ob die Nachrichten eines Vorgangs verschlüsselt oder signiert werden müssen oder beides beziehungsweise legt ihn fest.

ReplyAction

Ruft ab oder legt den Wert der SOAP-Aktion für die Antwortnachricht des Vorgangs fest.

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_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)
_Attribute.GetTypeInfoCount(UInt32)

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

(Geerbt von Attribute)
_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)

Gilt für: