Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

OperationContractAttribute.Action Property

Definition

Namespace:
System.ServiceModel
Assemblies:
System.ServiceModel.dll, System.ServiceModel.Primitives.dll
Assembly:
System.ServiceModel.Primitives.dll
Assembly:
System.ServiceModel.dll
Package:
System.ServiceModel.Primitives v10.0.652802
Source:
OperationContractAttribute.cs
Source:
OperationContractAttribute.cs
Source:
OperationContractAttribute.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

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

Property Value

The action to use in generating the WS-Addressing Action header.

Exceptions

The value is null.

Examples

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

Remarks

Use the Action property to control the action of the method's input message. Because WCF uses this action to dispatch an incoming message to the appropriate method, messages used within a contract operation must have unique actions. 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. 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). This type of operation, called an unmatched message handler, must have one of following method signatures, or a InvalidOperationException is thrown:

  • The service operation can take only a Message object and return a Message object.

  • The service operation can take only a Message object and return nothing (that is, return void).

Note

A service contract can have only one service operation with the Action property set to "*". 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. However, only one of those service operations can have the Action property set to "*" and the IsInitiating property set to true. For more details, see IsInitiating.

Applies to


Feedback

Was this page helpful?