OperationContractAttribute Class

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Indicates that a method defines an operation that is part of a service contract in a Silverlight application.

Inheritance Hierarchy

System.Object
  System.Attribute
    System.ServiceModel.OperationContractAttribute

Namespace:  System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

Syntax

'Declaration
<AttributeUsageAttribute(AttributeTargets.Method)> _
Public NotInheritable Class OperationContractAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute

The OperationContractAttribute type exposes the following members.

Constructors

  Name Description
Public methodSupported by Silverlight for Windows Phone OperationContractAttribute Initializes a new instance of the OperationContractAttribute class.

Top

Properties

  Name Description
Public propertySupported by Silverlight for Windows Phone Action Gets or sets the WS-Addressing action of the request message.
Public propertySupported by Silverlight for Windows Phone AsyncPattern Indicates that an operation is implemented asynchronously using a Begin<methodName> and End<methodName> method pair in a service contract.
Public propertySupported by Silverlight for Windows Phone IsOneWay Gets or sets a value that indicates whether an operation returns a reply message.
Public propertySupported by Silverlight for Windows Phone Name Gets or sets the name of the operation.
Public propertySupported by Silverlight for Windows Phone ReplyAction Gets or sets the value of the SOAP action for the reply message of the operation.

Top

Methods

  Name Description
Public methodSupported by Silverlight for Windows Phone Equals Infrastructure. Returns a value that indicates whether this instance is equal to a specified object. (Inherited from Attribute.)
Protected methodSupported by Silverlight for Windows Phone Finalize Allows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.)
Public methodSupported by Silverlight for Windows Phone GetHashCode Returns the hash code for this instance. (Inherited from Attribute.)
Public methodSupported by Silverlight for Windows Phone GetType Gets the Type of the current instance. (Inherited from Object.)
Public methodSupported by Silverlight for Windows Phone Match When overridden in a derived class, returns a value that indicates whether this instance equals a specified object. (Inherited from Attribute.)
Protected methodSupported by Silverlight for Windows Phone MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public methodSupported by Silverlight for Windows Phone ToString Returns a string that represents the current object. (Inherited from Object.)

Top

Remarks

Apply the OperationContractAttribute to a method to indicate that the method implements a service operation as part of a service contract (specified by a ServiceContractAttribute attribute).

Use the following OperationContractAttribute properties to control the structure of the operation and the values expressed in metadata:

  • The Action property specifies the action that uniquely identifies this operation.

  • The AsyncPattern property indicates that the operation is implemented or can be called asynchronously using a Begin/End method pair.

  • The ReplyAction property specifies the action of the reply message for the operation.

The OperationContractAttribute attribute declares that a method is an operation in a service contract. Only methods attributed with the OperationContractAttribute are exposed as service operations. A service contract without any methods marked with the OperationContractAttribute exposes no operations.

The AsyncPattern property indicates that a pair of Begin<methodName> and End<methodName> methods form a single operation implemented asynchronously (whether on the client or the service). The ability of a client to implement operations asynchronously is a client implementation detail and is not exposed in metadata (such as Web Services Description Language (WSDL)). Clients can choose to invoke operations asynchronously independent of how the service method is implemented. Calling service operations asynchronously in the client is recommended when a service method takes some time but must return information directly to the client.

For more information, see

AsyncPattern.

The Action and ReplyAction properties can be used not only to modify the default action of SOAP messages, but also to create handlers for unrecognized messages or to disable adding actions for direct message programming.

Examples

    ' A service contract that is defined with an interface
    ' using an aysnchronous pattern for Silverlight applications
    ' and a synchronous pattern otherwise.
    <ServiceContract(Name := "SampleServiceContract1", Namespace := "http://microsoft.SL3.documentation")> _
    Public Interface IService1
#If SILVERLIGHT Then
        <OperationContract(AsyncPattern := True)> _
        Function BeginGetPerson(ByVal personId As Integer, ByVal callback As AsyncCallback, ByVal state As Object) As IAsyncResult

        Function EndGetPerson(ByVal result As IAsyncResult) As Person
#Else
        <OperationContract> _
        Function GetPerson(ByVal personId As Integer) As Person
#End If
    End Interface

    <DataContract> _
    Public Class Person
        <DataMember> _
        Public Name As String
        <DataMember> _
        Public Age As Integer

    End Class


    ' A service contract defined with a class
    ' for an operation that handles all messages the service receives.
    <ServiceContract(Name := "SampleServiceContract2", Namespace := "http://microsoft.SL3.documentation")> _
    Public Class CustomerService
        <OperationContract(Name := "SampleOperationContract1")> _
        Public Function CountUsers() As Integer
            Return 2
        End Function

        <OperationContract(Action := "*")> _
        Public Function GetUser(ByVal id As Integer) As User
            If id = 1 Then
                Return New User() With {.IsMember = True, .Name = "Paul", .Age = 24}
            Else
                Return New User() With {.IsMember = False, .Name = "John", .Age = 64}
            End If
        End Function
    End Class

    <DataContract> _
    Public Class User
        Private privateIsMember As Boolean
        <DataMember> _
        Public Property IsMember() As Boolean
            Get
                Return privateIsMember
            End Get
            Set(ByVal value As Boolean)
                privateIsMember = value
            End Set
        End Property

        Private privateName As String
        <DataMember> _
        Public Property Name() As String
            Get
                Return privateName
            End Get
            Set(ByVal value As String)
                privateName = value
            End Set
        End Property

        Private privateAge As Integer
        <DataMember> _
        Public Property Age() As Integer
            Get
                Return privateAge
            End Get
            Set(ByVal value As Integer)
                privateAge = value
            End Set
        End Property
    End Class


    ' A service contract defined with a class
    ' for different response patterns.
    <ServiceContract(Name := "SampleServiceContract3", Namespace := "http://microsoft.SL3.documentation")> _
    Public Class OneAndTwoWay
        ' The client waits until a response message appears.
        <OperationContract> _
        Public Function MethodOne(ByVal x As Integer, <System.Runtime.InteropServices.Out()> ByRef y As Integer) As Integer
            y = 34
            Return 0
        End Function

        ' The client waits until an empty response message appears.
        <OperationContract> _
        Public Sub MethodTwo(ByVal x As Integer)
            Return
        End Sub

        ' The client returns as soon as an outbound message
        ' is queued for dispatch to the service; no response
        ' message is generated or sent.
        <OperationContract(IsOneWay := True)> _
        Public Sub MethodThree(ByVal x As Integer)
            Return
        End Sub
    End Class
    // A service contract that is defined with an interface
    // using an aysnchronous pattern for Silverlight applications
    // and a synchronous pattern otherwise.
    [ServiceContract(
        Name = "SampleServiceContract1",
        Namespace = "http://microsoft.SL3.documentation")]
    public interface IService1
    {
#if SILVERLIGHT
        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginGetPerson(int personId, AsyncCallback callback, object state);

        Person EndGetPerson(IAsyncResult result);
#else
        [OperationContract]
        Person GetPerson(int personId);
#endif
    }

    [DataContract]
    public class Person
    {
        [DataMember]
        public string Name;
        [DataMember]
        public int Age;

    }


    // A service contract defined with a class
    // for an operation that handles all messages the service receives.
    [ServiceContract(
        Name = "SampleServiceContract2",
        Namespace = "http://microsoft.SL3.documentation")]
    public class CustomerService
    {
        [OperationContract(Name = "SampleOperationContract1")]
        public int CountUsers()
        {
            return 2;
        }

        [OperationContract(Action = "*")]
        public User GetUser(int id)
        {
            if (id == 1)
            {
                return new User() { IsMember = true, Name = "Paul", Age = 24 };
            }
            else
            {
                return new User() { IsMember = false, Name = "John", Age = 64 };
            }
        }
    }

    [DataContract]
    public class User
    {
        [DataMember]
        public bool IsMember { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public int Age { get; set; }
    }


    // A service contract defined with a class
    // for different response patterns.
    [ServiceContract(
        Name = "SampleServiceContract3",
        Namespace = "http://microsoft.SL3.documentation")]
    public class OneAndTwoWay
    {
        // The client waits until a response message appears.
        [OperationContract]
        public int MethodOne(int x, out int y)
        {
            y = 34;
            return 0;
        }

        // The client waits until an empty response message appears.
        [OperationContract]
        public void MethodTwo(int x)
        {
            return;
        }

        // The client returns as soon as an outbound message
        // is queued for dispatch to the service; no response
        // message is generated or sent.
        [OperationContract(IsOneWay = true)]
        public void MethodThree(int x)
        {
            return;
        }
    }

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Reference