OperationContractAttribute Classe

Définition

Indique qu’une méthode définit une opération qui fait partie d’un contrat de service dans une application Windows Communication Foundation (WCF).

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
Héritage
OperationContractAttribute
Attributs

Exemples

L'exemple de code suivant présente un contrat de service simple avec une opération.

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

L'exemple suivant est un service qui implémente un contrat de service implicite qui spécifie trois opérations. Deux des opérations sont des opérations bidirectionnelles, qui retournent des messages de réponse sous-jacents à l'appelant, quelle que soit la valeur de retour. La troisième opération reçoit un appel, un message entrant sous-jacent, mais ne retourne aucun message de réponse sous-jacent.

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

Remarques

Appliquez l'OperationContractAttribute à une méthode pour indiquer que la méthode implémente une opération de service dans le cadre d'un contrat de service (spécifié par un attribut ServiceContractAttribute ).

Utilisez les propriétés OperationContractAttribute pour contrôler la structure de l'opération et les valeurs exprimées dans les métadonnées :

  • La propriété Action spécifie l'action qui identifie cette opération de façon unique. WCF distribue les messages de requête aux méthodes en fonction de leur action.

  • La propriété AsyncPattern indique que l'opération est implémentée ou peut être appelée de façon asynchrone à l'aide d'une paire de méthodes Begin/End.

  • La propriété HasProtectionLevel indique si la propriété ProtectionLevel a été explicitement définie.

  • La propriété IsOneWay indique que l'opération se compose uniquement d'un message d'entrée. Aucun message de sortie n'est associé à l'opération.

  • La propriété IsInitiating spécifie si cette opération peut être l'opération initiale dans une session.

  • La IsTerminating propriété spécifie si WCF tente d’arrêter la session active une fois l’opération terminée.

  • La propriété ProtectionLevel spécifie la sécurité au niveau du message qu'une opération requiert au moment de l'exécution.

  • La propriété ReplyAction spécifie l'action du message de réponse pour l'opération.

L'attribut OperationContractAttribute déclare qu'une méthode est une opération dans un contrat de service. Seules les méthodes qui possèdent l'attribut OperationContractAttribute sont exposées comme opérations de service. Un contrat de service sans méthode marquée avec l'OperationContractAttribute n'expose aucune opération.

La AsyncPattern propriété indique qu’une paire de Begin<methodName> méthodes forme End<methodName> une seule opération implémentée de manière asynchrone (sur le client ou le service). La capacité d'un service à implémenter des opérations de façon asynchrone est un détail d'implémentation du service et n'est pas exposée dans les métadonnées (comme WSDL (Web Services Description Language)).

De même, les clients peuvent choisir d'appeler des opérations de façon asynchrone indépendantes de la façon dont la méthode de service est implémentée. Appeler des opérations de service de façon asynchrone dans le client est recommandé lorsqu'une méthode de service prend du temps mais qu'elle doit retourner directement des informations au client. Pour plus d'informations, consultez AsyncPattern.

La propriété IsOneWay indique qu'une méthode ne retourne pas de valeur du tout, y compris un message de réponse sous-jacent vide. Ce type de méthode est utile pour les notifications ou la communication de style événement. Les méthodes de ce type ne peuvent pas retourner de message de réponse. La déclaration de la méthode doit donc retourner void.

Important

Lorsque vous récupérez par programmation le magasin d’informations dans cet attribut, utilisez la ContractDescription classe au lieu de la réflexion.

Notes

Si la propriété IsOneWay a la valeur false (valeur par défaut), même les méthodes qui retournent void sont des méthodes bidirectionnelles au niveau de messages sous-jacents. Dans ce cas, l'infrastructure crée et envoie un message vide pour indiquer à l'appelant que la méthode a été retournée. Cette approche permet à l'application et à l'infrastructure de retourner des informations sur l'erreur (comme une erreur SOAP) au client. Affecter IsOneWay à true est la seule méthode pour éviter la création et la distribution d'un message de réponse. Pour plus d’informations, consultez Services unidirectionnel.

Les propriétés Action et ReplyAction peuvent être utilisées non seulement pour modifier l'action par défaut des messages SOAP, mais également pour créer des gestionnaires pour les messages non reconnus ou désactiver les actions d'ajout pour la programmation de message directe. Utilisez la propriété IsInitiating pour éviter que les clients appellent une opération de service particulière avant d'autres opérations. Utilisez la IsTerminating propriété pour que WCF ferme le canal une fois que les clients appellent une opération de service particulière. Pour plus d’informations, consultez Utilisation de sessions.

La propriété ProtectionLevel vous permet de spécifier sur le contrat d'opération si les messages d'opération sont signés, chiffrés ou signés et chiffrés. Si une liaison ne peut pas fournir le niveau de sécurité requis par le contrat, une exception est levée au moment de l’exécution. Pour plus d’informations, consultez ProtectionLevel et Présentation du niveau de protection.

Constructeurs

OperationContractAttribute()

Initialise une nouvelle instance de la classe OperationContractAttribute.

Propriétés

Action

Obtient ou définit l'action WS-Addressing du message de demande.

AsyncPattern

Indique qu’une opération est implémentée de manière asynchrone à l’aide d’une Begin< paire méthodeName> et End<methodName> dans un contrat de service.

HasProtectionLevel

Obtient une valeur qui indique si les messages pour cette opération doivent être chiffrés, signés ou les deux.

IsInitiating

Obtient ou définit une valeur qui indique si la méthode implémente une opération qui peut initialiser une session sur le serveur (si une telle session existe).

IsOneWay

Obtient ou définit une valeur qui indique si une opération retourne un message de réponse.

IsTerminating

Obtient ou définit une valeur qui indique si l'opération de service conduit le serveur à fermer la session après l'envoi du message de réponse (le cas échéant).

Name

Obtient ou définit le nom de l'opération.

ProtectionLevel

Obtient ou définit une valeur qui spécifie si les messages d'une opération doivent être chiffrés, signés ou les deux.

ReplyAction

Obtient ou définit la valeur de l'action SOAP pour le message de réponse de l'opération.

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

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

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à