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

String

La acción que utilizar al generar el encabezado de la acción WS-Addressing.

Excepciones

El valor es null.

Ejemplos

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

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 que se parecen 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

Utilice 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 propiedad Action.

Para indicar que una operación de servicio administra todos los mensajes que el servicio recibe pero que no se pueden dirigir a una operación de servicio, especifique el valor "*" (un asterisco). Este tipo de operación, denominada "controlador de mensajes que no coinciden", debe tener una de las siguientes firmas de método, si no se iniciará InvalidOperationException:

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

  • La operación de servicio puede tomar sólo un objeto Message y no devolver nada (es decir, devolver el valor void).

Nota

Un contrato de servicio sólo puede contar con una operación de servicio con la propiedad Action 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 en false. 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