Condividi tramite


OperationContractAttribute.Action Proprietà

Definizione

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.

Si applica a