Partager via


OperationContractAttribute.Action Propriété

Définition

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

public:
 property System::String ^ Action { System::String ^ get(); void set(System::String ^ value); };
public string Action { get; set; }
member this.Action : string with get, set
Public Property Action As String

Valeur de propriété

String

Action à utiliser pour générer l'en-tête de l'action WS-Addressing.

Exceptions

La valeur est null.

Exemples

L'exemple suivant est un service qui utilise les propriétés Action et ReplyAction pour contrôler explicitement les actions SOAP des messages d'entrée et de sortie (ou de réponse) et la propriété Name pour contrôler le nom de l'opération dans les métadonnées. Enfin, l'application utilise également une valeur d'Action de « * » pour indiquer une méthode qui gère les messages non reconnus.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="http://Microsoft.WCF.Documentation")]
  public interface ISampleService{

    [OperationContract(
      Action="http://Microsoft.WCF.Documentation/OperationContractMethod",
      Name="OCAMethod",
      ReplyAction="http://Microsoft.WCF.Documentation/ResponseToOCAMethod"
    )]
    string SampleMethod(string msg);

    [OperationContractAttribute(Action = "*")]
    void UnrecognizedMessageHandler(Message msg);
  }

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

    public void UnrecognizedMessageHandler(Message msg)
    {
      Console.WriteLine("Unrecognized message: " + msg.ToString());
    }
  }
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://Microsoft.WCF.Documentation")> _
  Public Interface ISampleService

        <OperationContract(Action:="http://Microsoft.WCF.Documentation/OperationContractMethod", _
                           Name:="OCAMethod", ReplyAction:="http://Microsoft.WCF.Documentation/ResponseToOCAMethod")> _
        Function SampleMethod(ByVal msg As String) As String

    <OperationContractAttribute(Action := "*")> _
    Sub UnrecognizedMessageHandler(ByVal msg As Message)
  End Interface

  Friend Class SampleService
      Implements ISampleService
    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

    Public Sub UnrecognizedMessageHandler(ByVal msg As Message) Implements ISampleService.UnrecognizedMessageHandler
      Console.WriteLine("Unrecognized message: " & msg.ToString())
    End Sub
  End Class
End Namespace

Un service qui implémente ce contrat envoie des messages qui ressemblent à l'exemple suivant :

<s:Envelope xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.WCF.Documentation/ResponseToOCAMethod</a:Action>
  </s:Header>
  <s:Body>
    <OCAMethodResponse xmlns="http://Microsoft.WCF.Documentation">
      <OCAMethodResult>The service greets you: Hello!</OCAMethodResult>
    </OCAMethodResponse>
  </s:Body>
</s:Envelope>

Remarques

Utilisez la Action propriété pour contrôler l’action du message d’entrée de la méthode. Étant donné que WCF utilise cette action pour distribuer un message entrant à la méthode appropriée, les messages utilisés dans une opération de contrat doivent avoir des actions uniques. La valeur d’action par défaut est une combinaison de l’espace de noms de contrat (la valeur par défaut est "http://tempuri.org/"), le nom du contrat (nom de l’interface ou nom de classe, si aucune interface de service explicite n’est utilisée), le nom de l’opération et une chaîne supplémentaire (« Réponse ») si le message est une réponse corrélée. Vous pouvez substituer cette valeur par défaut avec la propriété Action.

Pour indiquer qu'une opération de service gère tous les messages que le service reçoit mais ne peut pas être dirigée vers une opération de service, spécifiez la valeur « * » (astérisque). Ce type d'opération, appelé gestionnaire de messages non appariés, doit avoir l'une des signatures de méthode suivantes, sans quoi une InvalidOperationException est levée :

  • L'opération de service peut prendre uniquement un objet Message et retourner un objet Message.

  • L'opération de service peut prendre uniquement un objet Message et ne rien retourner (autrement dit, retourner void).

Notes

Un contrat de service peut avoir une seule opération de service avec la valeur « * » affectée à la propriété Action. Tout groupe de contrats de service hébergés au même listenUri qu’une classe de service implémente peut avoir de nombreuses opérations de service avec la Action propriété définie sur «* » lorsque la IsInitiating propriété est définie falsesur . Toutefois, une seule de ces opérations de service peut avoir la Action propriété définie sur «* » et la IsInitiating propriété définie sur true. Pour plus d'informations, consultez IsInitiating.

S’applique à