OperationContractAttribute.Action Свойство

Определение

Возвращает или задает действие WS-Addressing сообщения запроса.Gets or sets the WS-Addressing action of the request message.

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

Значение свойства

Действие, которое должно использоваться при создании заголовка действия WS-Addressing.The action to use in generating the WS-Addressing Action header.

Исключения

Значение — null.The value is null.

Примеры

В следующем примере представлена служба, которая использует свойства Action и ReplyAction для явного управления действиями SOAP входных и выходных (или ответных) сообщений и свойство Name для управления именем операции в метаданных.The following example is a service that uses the Action and ReplyAction properties to explicitly control the SOAP actions of both the input and output (or reply) messages, and the Name property to control the name of the operation in metadata. Наконец, приложение также использует значение «*» свойства Action, чтобы указать метод, который обрабатывает нераспознанные сообщения.Finally, the application also uses an Action value of "*" to indicate a method that handles unrecognized messages.

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

Служба, реализующая этот контракт, отправляет сообщения, которые выглядят примерно так, как в следующем примере:A service that implements this contract sends messages that look like the following example:

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

Комментарии

Используйте свойство Action для управления действием входного сообщения метода.Use the Action property to control the action of the method's input message. Поскольку WCF использует это действие для отправки входящего сообщения соответствующему методу, сообщения, используемые в операции контракта, должны иметь уникальные действия.Because WCF uses this action to dispatch an incoming message to the appropriate method, messages used within a contract operation must have unique actions. Значение действия по умолчанию — это сочетание пространства имен контракта (значение по умолчанию — "http://tempuri.org/"), имя контракта (имя интерфейса или имя класса, если не используется явный интерфейс службы), имя операции и дополнительная строка ("Response"), если сообщение является коррелированным ответом.The default action value is a combination of the contract namespace (the default value is "http://tempuri.org/"), the contract name (interface name or the class name, if no explicit service interface is used), the operation name, and an additional string ("Response") if the message is a correlated response. Это значение по умолчанию можно переопределить с помощью свойства Action.You can override this default with the Action property.

Чтобы указать, что операция службы обрабатывает все сообщения, которые принимает служба, но которые не могут быть направлены в операцию службы, задайте значение "*" (звездочка).To indicate that a service operation handles all messages that the service receives but cannot be directed to a service operation, specify the value "*" (an asterisk). Этот тип операции, называемый обработчиком несопоставленных сообщений, должен иметь одну из указанных ниже сигнатур метода. В противном случае вызывается исключение InvalidOperationException.This type of operation, called an unmatched message handler, must have one of following method signatures, or a InvalidOperationException is thrown:

  • Операция службы может принимать только объект Message и возвращать объект Message.The service operation can take only a Message object and return a Message object.

  • Операция службы может принимать только объект Message и не возвращать ничего (т. е. возвращать void).The service operation can take only a Message object and return nothing (that is, return void).

Примечание

Контракт службы может содержать только одну операцию службы со значением "*" свойства Action.A service contract can have only one service operation with the Action property set to "*". Любая группа контрактов служб, размещенных в том же listenUri, который реализуется классом службы, может иметь множество операций службы со свойством Action, для которого задано значение "*", если свойство IsInitiating имеет значение false.Any group of service contracts hosted at the same listenUri that a service class implements can have many service operations with the Action property set to "*" when the IsInitiating property is set to false. Однако только одна из этих операций службы может иметь свойство Action со значением "*", а свойству IsInitiating — значение true.However, only one of those service operations can have the Action property set to "*" and the IsInitiating property set to true. Дополнительные сведения см. в разделе IsInitiating.For more details, see IsInitiating.

Применяется к