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é

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

Exceptions

La valeur est null.

Exemples

L’exemple suivant est un service qui utilise les propriétés et ReplyAction les Action propriétés pour contrôler explicitement les actions SOAP des messages d’entrée et de sortie (ou réponse) et la Name propriété pour contrôler le nom de l’opération dans les métadonnées. Enfin, l’application utilise également une Action valeur 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 remplacer cette valeur par défaut par la Action propriété.

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

  • L’opération de service ne peut prendre qu’un Message objet et retourner un Message objet.

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

Note

Un contrat de service ne peut avoir qu’une seule opération de service avec la Action propriété définie sur « * ». 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 sur false. 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 à