OperationContractAttribute.Action Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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.