Export (0) Print
Expand All

How to: Define a Service Operation (WCF Data Services)

WCF Data Services expose methods that are defined on the server as service operations. Service operations allow a data service to provide access through a URI to a method that is defined on the server. To define a service operation, apply the [WebGet] or [WebInvoke] attribute to the method. To support query operators, the service operation must return an IQueryable(Of T) instance. Service operations may access the underlying data source through the CurrentDataSource property on the DataService(Of T). For more information, see Service Operations (WCF Data Services).

The example in this topic defines a service operation named GetOrdersByCity that returns a filtered IQueryable(Of T) instance of Orders and related Order_Details objects. The example accesses the ObjectContext instance that is the data source for the Northwind sample data service. This service is created when you complete the WCF Data Services quickstart.

To define a service operation in the Northwind data service

  1. In the Northwind data service project, open the Northwind.svc file.

  2. In the Northwind class, define a service operation method named GetOrdersByCity as follows:

    <WebGet()> _
    Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
    
  3. In the InitializeService method of the Northwind class, add the following code to enable access to the service operation:

    config.SetServiceOperationAccessRule( _
        "GetOrdersByCity", ServiceOperationRights.AllRead)
    

To query the GetOrdersByCity service operation

  • In a Web browser, enter one of the following URIs to invoke the service operation that is defined in the following example:

    • http://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'

    • http://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$top=2

    • http://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$expand=Order_Details&$orderby=RequiredDate desc

The following example implements a service operation named GetOrderByCity on the Northwind data service. This operation uses the ADO.NET Entity Framework to return a set of Orders and related Order_Details objects as an IQueryable(Of T) instance based on the provided city name.

Note Note

Query operators are supported on this service operation endpoint because the method returns an IQueryable(Of T) instance.

<WebGet()> _
Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
    If String.IsNullOrEmpty(city) Then 
        Throw New ArgumentNullException("city", _
            "You must provide a value for the parameter'city'.")
    End If 

    ' Get the ObjectContext that is the data source for the service. 
    Dim context As NorthwindEntities = Me.CurrentDataSource

    Try 
        Dim selectedOrders = From order In context.Orders.Include("Order_Details") _
                                 Where order.Customer.City = city _
                                 Select order
        Return selectedOrders
    Catch ex As Exception
        Throw New ApplicationException("An error occurred: {0}", ex)
    End Try 
End Function
Show:
© 2014 Microsoft