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.
Ottiene o imposta 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 usare per generare l'intestazione WS-Addressing Action.
Eccezioni
Il valore è null.
Esempio
L'esempio seguente è un servizio che usa le Action proprietà e ReplyAction per controllare in modo esplicito le azioni SOAP dei messaggi di input e output (o risposta) e la Name proprietà per controllare il nome dell'operazione nei metadati. Infine, l'applicazione usa anche un Action valore "*" 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 simili all'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 arrivo al metodo appropriato, i messaggi utilizzati 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 del servizio esplicita), il nome dell'operazione e una stringa aggiuntiva ("Risposta") se il messaggio è una risposta correlata. È possibile eseguire l'override di questa impostazione predefinita con la Action proprietà .
Per indicare che un'operazione del servizio gestisce tutti i messaggi ricevuti dal servizio, ma non può essere indirizzata a un'operazione del servizio, specificare il valore "*" (un asterisco). Questo tipo di operazione, denominato gestore di messaggi senza corrispondenza, deve avere una delle firme del metodo seguenti oppure viene generata una InvalidOperationException delle seguenti operazioni:
L'operazione del servizio può accettare solo un Message oggetto e restituire un Message oggetto .
L'operazione del servizio può accettare solo un Message oggetto e non restituire nulla, ovvero restituire
void.
Annotazioni
Un contratto di servizio può avere una sola operazione di servizio con la Action proprietà impostata su "*". Qualsiasi gruppo di contratti di servizio ospitato nello stesso listenUri implementato da una classe di servizio può avere molte operazioni del servizio con la Action proprietà impostata su "*" quando la IsInitiating proprietà è impostata su false. Tuttavia, solo una di queste operazioni del servizio può avere la Action proprietà impostata su "*" e la IsInitiating proprietà impostata su true. Per altri dettagli, vedere IsInitiating.