Freigeben über


OperationContractAttribute.Action Eigenschaft

Definition

Ruft ab oder legt die WS-Adressierungsaktion der Anforderungsnachricht fest.

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

Eigenschaftswert

String

Die beim Generieren des WS-Adressierungsaktionsheaders zu verwendende Aktion.

Ausnahmen

Der Wert ist null.

Beispiele

Im nachstehenden Beispiel ist ein Dienst dargestellt, für den die Action-Eigenschaft und die ReplyAction-Eigenschaft zur ausdrücklichen Steuerung der SOAP-Aktionen sowohl der eingehenden als auch der ausgehenden (oder Antwort-) Nachrichten und die Name-Eigenschaft zur Steuerung des Vorgangsnamens in den Metadaten verwendet werden. Außerdem verwendet die Anwendungen einen Action-Wert von "*" zur Angabe einer Methode für die Verarbeitung unerkannter Nachrichten.

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

Ein Dienst, der diesen Vertrag implementiert, sendet Nachrichten entsprechend nachstehendem Beispiel:

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

Hinweise

Verwenden Sie die Action Eigenschaft, um die Aktion der Eingabenachricht der Methode zu steuern. Da WCF diese Aktion verwendet, um eine eingehende Nachricht an die entsprechende Methode zu senden, müssen Nachrichten, die innerhalb eines Vertragsvorgangs verwendet werden, eindeutige Aktionen aufweisen. Der Standardwert ist eine Kombination aus dem Vertragsnamespace (der Standardwert ist), der Vertragsname (Schnittstellenname oder der Klassenname, wenn keine explizite Dienstschnittstelle verwendet wird), der Vorgangsname und eine zusätzliche Zeichenfolge (" "http://tempuri.org/"Antwort") wenn die Nachricht eine korrelierte Antwort ist. Sie können diesen Standard mit der Action-Eigenschaft überschreiben.

Um anzugeben, dass ein Dienstvorgang alle Nachrichten verarbeitet soll, die der Dienst empfängt, jedoch nicht an einen Dienstvorgang weiterleiteten kann, geben Sie als Wert "*" (ein Sternchen) an. Dieser Vorgangstyp wird als fehlender Nachrichtenhandler bezeichnet und muss über eine der nachstehenden Methodensignaturen verfügen. Andernfalls wird ein InvalidOperationException ausgelöst:

  • Die Dienstoperation kann nur ein Message-Objekt annehmen und ein Message-Objekt zurückgeben.

  • Die Dienstoperation kann nur ein Message-Objekt annehmen und nichts (das heißt, void) zurückgeben.

Hinweis

Ein Dienstvertrag kann nur über einen Dienstvorgang verfügen, für den die Action-Eigenschaft auf "*" gesetzt ist. Jede Gruppe von Dienstverträgen, die in derselben ListenUri gehostet werden, die eine Dienstklasse implementiert, kann viele Dienstvorgänge mit der Eigenschaft auf "" festlegenfalse, wenn die Action IsInitiating Eigenschaft auf "*festgelegt ist" verfügen. Allerdings kann nur eine dieser Dienstvorgänge die Eigenschaft auf "*" und die Action IsInitiating Eigenschaft auf true festgelegt haben. Weitere Details finden Sie unter IsInitiating.

Gilt für