OperationContractAttribute.Action Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define a ação WS-Addressing da mensagem de solicitação.
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 Propriedade
A ação a usar na geração do cabeçalho de WS-Addressing Ação.
Exceções
O valor é null.
Exemplos
O exemplo seguinte é um serviço que utiliza as Action propriedades e ReplyAction para controlar explicitamente as ações SOAP tanto das mensagens de entrada como de saída (ou resposta), bem como a Name propriedade para controlar o nome da operação nos metadados. Finalmente, a aplicação também utiliza um Action valor de "*" para indicar um método que lida com mensagens não reconhecidas.
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
Um serviço que implementa este contrato envia mensagens que se assemelham ao seguinte exemplo:
<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>
Observações
Use a Action propriedade para controlar a ação da mensagem de entrada do método. Como a WCF utiliza esta ação para despachar uma mensagem recebida para o método apropriado, as mensagens usadas numa operação contratual devem ter ações únicas. O valor padrão da ação é uma combinação do espaço de nomes do contrato (o valor padrão é "http://tempuri.org/"), do nome do contrato (nome da interface ou nome da classe, caso não seja usada uma interface de serviço explícita), o nome da operação e uma cadeia adicional ("Resposta") se a mensagem for uma resposta correlacionada. Pode anular este padrão com a Action propriedade.
Para indicar que uma operação de serviço trata todas as mensagens que o serviço recebe mas não pode ser direcionadas para uma operação de serviço, especifique o valor "*" (um asterisco). Este tipo de operação, chamada de manipulador de mensagens não emparelhadas, deve ter uma das seguintes assinaturas de método, ou é lançado um InvalidOperationException lançamento:
A operação de serviço pode tomar apenas um Message objeto e devolver um Message objeto.
A operação de serviço pode aceitar apenas um Message objeto e não devolver nada (ou seja, devolver
void).
Note
Um contrato de serviço pode ter apenas uma operação de serviço com a Action propriedade definida como "*". Qualquer grupo de contratos de serviço alojados no mesmo listenUri que uma classe de serviço implementa pode ter muitas operações de serviço com a Action propriedade definida para "*" quando a IsInitiating propriedade está definida para false. No entanto, apenas uma dessas operações de serviço pode ter a Action propriedade definida como "*" e a IsInitiating propriedade definida como verdadeira. Para obter mais detalhes, veja IsInitiating.