Condividi tramite


OperationContractAttribute.Action Proprietà

Definizione

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à

String

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.

Si applica a