OperationContractAttribute.Action Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 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 false
sur . 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.