OperationContractAttribute.Action Egenskap

Definition

Hämtar eller anger åtgärden WS-Addressing för begärandemeddelandet.

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

Egenskapsvärde

Den åtgärd som ska användas för att generera WS-Addressing-åtgärdsrubriken.

Undantag

Värdet är null.

Exempel

Följande exempel är en tjänst som använder Action egenskaperna och ReplyAction för att uttryckligen styra SOAP-åtgärderna för både in- och utdatameddelanden (eller svar) och Name egenskapen för att styra namnet på åtgärden i metadata. Slutligen använder programmet även värdet Action "*" för att ange en metod som hanterar okända meddelanden.

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

En tjänst som implementerar det här kontraktet skickar meddelanden som ser ut som i följande exempel:

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

Kommentarer

Använd egenskapen Action för att styra åtgärden för metodens indatameddelande. Eftersom WCF använder den här åtgärden för att skicka ett inkommande meddelande till lämplig metod måste meddelanden som används i en kontraktåtgärd ha unika åtgärder. Standardåtgärdsvärdet är en kombination av kontraktsnamnområdet (standardvärdet är "http://tempuri.org/"), kontraktsnamnet (gränssnittsnamnet eller klassnamnet, om inget explicit tjänstgränssnitt används), åtgärdsnamnet och ytterligare en sträng ("Svar") om meddelandet är ett korrelerat svar. Du kan åsidosätta den här standardinställningen Action med egenskapen .

Ange värdet "*" (en asterisk) för att ange att en tjänståtgärd hanterar alla meddelanden som tjänsten tar emot men inte kan dirigeras till en tjänståtgärd. Den här typen av åtgärd, som kallas en omatchad meddelandehanterare, måste ha någon av följande metodsignaturer, eller så genereras en InvalidOperationException :

  • Tjänståtgärden kan bara ta ett Message objekt och returnera ett Message objekt.

  • Tjänståtgärden kan bara ta ett Message objekt och returnera ingenting (det vill: returnera void).

Note

Ett tjänstkontrakt kan bara ha en tjänståtgärd med egenskapen inställd på Action "*". Alla grupper av tjänstkontrakt som finns på samma listenUri som en tjänstklass implementerar kan ha många tjänståtgärder med Action egenskapen inställd på "*" när IsInitiating egenskapen är inställd på false. Men endast en av dessa tjänståtgärder kan ha Action egenskapen inställd på "*" och egenskapen IsInitiating är inställd på true. Mer information finns i IsInitiating.

Gäller för