Freigeben über


OperationContractAttribute.Action Eigenschaft

Definition

Die WS-Adressierungsaktion der Anforderungsnachricht wird abgerufen oder festgelegt.

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

Die Aktion, die beim Generieren des WS-Addressing Aktionsheaders verwendet werden soll.

Ausnahmen

Der Wert ist null.

Beispiele

Das folgende Beispiel ist ein Dienst, der die ActionReplyAction SOAP-Aktionen sowohl der Eingabe- als auch der Ausgabe- (oder Antwortnachrichten) explizit steuert, und die Name Eigenschaft, um den Namen des Vorgangs in Metadaten zu steuern. Schließlich verwendet die Anwendung auch einen Action Wert von "*", um eine Methode anzugeben, die nicht erkannte Nachrichten behandelt.

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, die wie im folgenden Beispiel aussehen:

<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 Eingabemeldung der Methode zu steuern. Da WCF diese Aktion verwendet, um eine eingehende Nachricht an die entsprechende Methode zu verteilen, müssen nachrichten, die in einem Vertragsvorgang verwendet werden, eindeutige Aktionen aufweisen. Der Standardwert ist eine Kombination aus dem Vertragsnamespace (Standardwert ist "http://tempuri.org/"), der Vertragsname (Schnittstellenname oder Klassenname, wenn keine explizite Dienstschnittstelle verwendet wird), der Vorgangsname und eine zusätzliche Zeichenfolge ("Antwort"), wenn die Nachricht eine korrelierte Antwort ist. Sie können diese Standardeinstellung mit der Action Eigenschaft überschreiben.

Um anzugeben, dass ein Dienstvorgang alle Nachrichten verarbeitet, die der Dienst empfängt, aber nicht an einen Dienstvorgang weitergeleitet werden kann, geben Sie den Wert "*" (ein Sternchen) an. Dieser Vorgangstyp, der als nicht übereinstimmender Nachrichtenhandler bezeichnet wird, muss über eine der folgenden Methodensignaturen verfügen, oder ein InvalidOperationException Fehler wird ausgelöst:

  • Der Dienstvorgang kann nur ein Message Objekt annehmen und ein Message Objekt zurückgeben.

  • Der Dienstvorgang kann nur ein Message Objekt annehmen und nichts zurückgeben (d. a. zurückgeben void).

Hinweis

Ein Dienstvertrag kann nur einen Dienstvorgang haben, bei dem die Action Eigenschaft auf "*" festgelegt ist. Jede Gruppe von Dienstverträgen, die in derselben Listenuri gehostet werden, die von einer Dienstklasse implementiert wird, kann viele Dienstvorgänge aufweisen, wobei die Action Eigenschaft auf "*" festgelegt ist, wenn die IsInitiating Eigenschaft auf false"*" festgelegt ist. Allerdings kann nur eine dieser Dienstvorgänge die Action Eigenschaft auf "*" und die IsInitiating Eigenschaft auf "true" festgelegt haben. Weitere Details finden Sie unter IsInitiating.

Gilt für: