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