OperationContractAttribute.Action Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Consente di ottenere o impostare l'azione WS-Addressing del messaggio di richiesta.
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
Valore della proprietà
Azione da utilizzare nella creazione dell'intestazione dell'azione WS-Addressing.
Eccezioni
Il valore è null
.
Esempio
L'esempio seguente illustra un servizio che utilizza le proprietà Action e ReplyAction per controllare in modo esplicito le azioni SOAP sia del messaggio di input sia di quello di output (o di risposta) e la proprietà Name per controllare il nome dell'operazione nei metadati. Infine, l'attributo Action dell'applicazione illustrata nell'esempio è impostato su "*" per indicare un metodo che gestisce i messaggi non riconosciuti.
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 servizio che implementa questo contratto invia messaggi analoghi a quelli mostrati nell'esempio seguente:
<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>
Commenti
Utilizzare la Action proprietà per controllare l'azione del messaggio di input del metodo. Poiché WCF usa questa azione per inviare un messaggio in ingresso al metodo appropriato, i messaggi usati all'interno di un'operazione del contratto devono avere azioni univoche. Il valore dell'azione predefinito è una combinazione dello spazio dei nomi del contratto (il valore predefinito è "http://tempuri.org/"
), il nome del contratto (nome dell'interfaccia o il nome della classe, se non viene usata alcuna interfaccia di servizio esplicita), il nome dell'operazione e una stringa aggiuntiva ("Risposta") se il messaggio è una risposta correlata. Per eseguire l'override di questo valore predefinito è possibile utilizzare la proprietà Action.
Per indicare che un'operazione di servizio gestisce tutti i messaggi che sono stati ricevuti dal servizio ma che non possono essere indirizzati a un'operazione di servizio, impostare il valore su asterisco ("*"). Questo tipo di operazione, detta "gestore dei messaggi non corrispondenti", deve presentare una delle firme di metodo seguenti. In caso contrario, l'infrastruttura genera un'eccezione InvalidOperationException:
L'operazione di servizio può ricevere solo un oggetto Message e restituire un oggetto Message.
L'operazione di servizio può ricevere solo un oggetto Message e non può restituire alcun valore (ovvero, può restituire solo
void
).
Nota
In un contratto di servizio può esistere una sola operazione di servizio avente la proprietà Action impostata su "*." Qualsiasi gruppo di contratti di servizio ospitato nello stesso listenUri che una classe di servizio implementa può avere molte operazioni di servizio con la proprietà impostata su "" quando la Action IsInitiating proprietà è impostata su false
.* Tuttavia, solo una delle operazioni del servizio può avere la Action proprietà impostata su "*" e la IsInitiating proprietà impostata su true. Per altri dettagli, vedere IsInitiating.