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 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.