Sdílet prostřednictvím


OperationContractAttribute.Action Vlastnost

Definice

Získá nebo nastaví WS-Addressing akci žádosti zprávy.

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

Hodnota vlastnosti

String

Akce, která se má použít při generování záhlaví akce WS-Addressing.

Výjimky

Hodnota je null.

Příklady

Následující příklad je služba, která používá Action a ReplyAction vlastnosti explicitně řídit akce PROTOKOLU SOAP vstupních i výstupních zpráv (nebo odpovědi) a Name vlastnost řídit název operace v metadatech. Aplikace také používá Action hodnotu "*" k označení metody, která zpracovává nerozpoznané zprávy.

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

Služba, která implementuje tento kontrakt, odesílá zprávy, které vypadají jako v následujícím příkladu:

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

Poznámky

Action Vlastnost slouží k řízení akce vstupní zprávy metody. Vzhledem k tomu, že WCF tuto akci používá k odeslání příchozí zprávy do příslušné metody, zprávy používané v rámci operace kontraktu musí mít jedinečné akce. Výchozí hodnota akce je kombinace oboru názvů kontraktu (výchozí hodnota je "http://tempuri.org/"), název kontraktu (název rozhraní nebo název třídy, pokud se nepoužívá žádné explicitní rozhraní služby), název operace a další řetězec ("Response") pokud je zpráva korelovaná odpověď. Toto výchozí nastavení můžete přepsat vlastností Action .

Chcete-li označit, že operace služby zpracovává všechny zprávy, které služba přijímá, ale nelze ji směrovat na operaci služby, zadejte hodnotu "*" (hvězdička). Tento typ operace, označovaný jako obslužná rutina zprávy, musí mít jeden z následujících podpisů metody nebo InvalidOperationException je vyvolán:

  • Operace služby může převzít pouze Message objekt a vrátit Message objekt.

  • Operace služby může převzít pouze Message objekt a vrátit nic (to znamená vrátit void).

Poznámka

Kontrakt služby může mít pouze jednu operaci služby s vlastností nastavenou Action na *. Každá skupina kontraktů služeb hostovaných na stejném naslouchacím procesu, kterou implementuje třída služby, může mít mnoho operací služby s Action vlastností nastavenou na "*" při IsInitiating nastavení falsevlastnosti . Nicméně pouze jeden z těchto operací služby může mít Action vlastnost nastavenou na "*" a vlastnost nastavena IsInitiating na true. Další podrobnosti najdete tady: IsInitiating.

Platí pro