OperationContractAttribute.Action Eigenschap

Definitie

Hiermee haalt u de WS-Adresseringsactie van het aanvraagbericht op of stelt u deze in.

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

Waarde van eigenschap

De actie die moet worden gebruikt bij het genereren van de WS-Addressing Action-header.

Uitzonderingen

De waarde is null.

Voorbeelden

Het volgende voorbeeld is een service die gebruikmaakt van de Action en ReplyAction eigenschappen om expliciet de SOAP-acties van zowel de invoer- als uitvoerberichten (of antwoorden) te beheren en de Name eigenschap om de naam van de bewerking in metagegevens te beheren. Ten slotte gebruikt de toepassing ook een Action waarde van '*' om een methode aan te geven die niet-herkende berichten verwerkt.

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

Een service die dit contract implementeert, verzendt berichten die eruitzien als in het volgende voorbeeld:

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

Opmerkingen

Gebruik de Action eigenschap om de actie van het invoerbericht van de methode te beheren. Omdat WCF deze actie gebruikt om een binnenkomend bericht naar de juiste methode te verzenden, moeten berichten die in een contractbewerking worden gebruikt, unieke acties hebben. De standaardactiewaarde is een combinatie van de contractnaamruimte (de standaardwaarde is "http://tempuri.org/"), de contractnaam (interfacenaam of de klassenaam, als er geen expliciete service-interface wordt gebruikt), de naam van de bewerking en een extra tekenreeks ('Antwoord') als het bericht een gecorreleerd antwoord is. U kunt deze standaardwaarde overschrijven met de Action eigenschap.

Als u wilt aangeven dat een servicebewerking alle berichten verwerkt die de service ontvangt, maar niet kan worden omgeleid naar een servicebewerking, geeft u de waarde '*' (een sterretje) op. Dit type bewerking, een zogenaamde niet-overeenkomende berichthandler, moet een van de volgende methodehandtekeningen hebben of er wordt een InvalidOperationException gegenereerd:

  • De servicebewerking kan alleen een Message object aannemen en een Message object retourneren.

  • De servicebewerking kan alleen een Message object aannemen en niets retourneren (dat wil wel retourneren void).

Note

Een servicecontract kan slechts één servicebewerking hebben waarbij de Action eigenschap is ingesteld op '*'. Elke groep servicecontracten die worden gehost op dezelfde listenUri die door een serviceklasse wordt geïmplementeerd, kan veel servicebewerkingen hebben waarbij de Action eigenschap is ingesteld op '*' wanneer de IsInitiating eigenschap is ingesteld op false. Slechts één van deze servicebewerkingen kan echter de Action eigenschap instellen op '*' en de IsInitiating eigenschap is ingesteld op true. Zie IsInitiating voor meer informatie.

Van toepassing op