Compartir vía


OperationContractAttribute.Action Propiedad

Definición

Obtiene o establece la acción WS-Addressing del mensaje de solicitud.

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

Valor de propiedad

Acción que se va a usar para generar el encabezado WS-Addressing Acción.

Excepciones

El valor es null.

Ejemplos

El ejemplo siguiente es un servicio que usa las Action propiedades y ReplyAction para controlar explícitamente las acciones SOAP de los mensajes de entrada y salida (o respuesta) y la Name propiedad para controlar el nombre de la operación en los metadatos. Por último, la aplicación también usa un Action valor de "*" para indicar un método que controla los mensajes no reconocidos.

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 servicio que implementa este contrato envía mensajes similares al ejemplo siguiente:

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

Comentarios

Use la Action propiedad para controlar la acción del mensaje de entrada del método. Dado que WCF usa esta acción para enviar un mensaje entrante al método adecuado, los mensajes usados dentro de una operación de contrato deben tener acciones únicas. El valor de acción predeterminado es una combinación del espacio de nombres del contrato (el valor predeterminado es "http://tempuri.org/"), el nombre del contrato (nombre de interfaz o el nombre de clase, si no se usa ninguna interfaz de servicio explícita), el nombre de la operación y una cadena adicional ("Respuesta") si el mensaje es una respuesta correlacionada. Puede invalidar este valor predeterminado con la Action propiedad .

Para indicar que una operación de servicio controla todos los mensajes que recibe el servicio, pero no se pueden dirigir a una operación de servicio, especifique el valor "*" (un asterisco). Este tipo de operación, denominado controlador de mensajes no coincidentes, debe tener una de las siguientes firmas de método o InvalidOperationException se inicia :

  • La operación de servicio solo puede tomar un Message objeto y devolver un Message objeto .

  • La operación de servicio solo puede tomar un Message objeto y devolver nada (es decir, devolver void).

Nota:

Un contrato de servicio solo puede tener una operación de servicio con la Action propiedad establecida en "*". Cualquier grupo de contratos de servicio hospedados en el mismo listenUri que implementa una clase de servicio puede tener muchas operaciones de servicio con la Action propiedad establecida en "*" cuando la IsInitiating propiedad está establecida falseen . Sin embargo, solo una de esas operaciones de servicio puede tener la Action propiedad establecida en "*" y la IsInitiating propiedad establecida en true. Para obtener más información, vea IsInitiating.

Se aplica a