Compartir a través de


Cómo: Definir una operación de servicio (WCF Data Services)

Servicios de datos de Microsoft WCF expone métodos que se definen en el servidor como operaciones de servicio. Las operaciones de servicio permiten que un servicio de datos proporcione acceso a través de un URI a un método que se define en el servidor. Para definir una operación de servicio, aplique el atributo WebGet] o [WebInvoke] al método. Para que admita operadores de consulta, la operación del servicio debe devolver una instancia de IQueryable<T>. Las operaciones de servicio pueden tener acceso al origen de datos subyacente por medio de la propiedad CurrentDataSource en DataService<T>. Para obtener más información, vea Operaciones de servicio (WCF Data Services).

En el ejemplo de este tema se define una operación del servicio denominada GetOrdersByCity que devuelve una instancia de IQueryable<T> filtrada de los objetos Order_Details y Orders relacionados. En el ejemplo se obtiene acceso a la instancia de ObjectContext que es el origen de datos del servicio de datos de ejemplo Northwind. Este servicio se crea cuando se completa el Tutorial rápido de WCF Data Services.

Para definir una operación del servicio en el servicio de datos Northwind

  1. En el proyecto del servicio de datos Northwind, abra el archivo Northwind.svc.

  2. En la clase Northwind, defina un método de operación de servicio denominado GetOrdersByCity como sigue:

    <WebGet()> _
    Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
    
    [WebGet]
    public IQueryable<Order> GetOrdersByCity(string city)
    
  3. En el método InitializeService de la clase Northwind, agregue el siguiente código para permitir el acceso a la operación del servicio:

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

Para consultar la operación del servicio GetOrdersByCity

  • En un explorador web, escriba uno de los siguientes URI para invocar la operación del servicio que se define en el siguiente ejemplo:

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

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

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

Ejemplo

En el ejemplo siguiente se implementa una operación del servicio denominada GetOrderByCity en el servicio de datos Northwind. Esta operación utiliza ADO.NET Entity Framework para devolver un conjunto de objetos Order_Details y Orders relacionados como una instancia de IQueryable<T> basada en el nombre de ciudad suministrado.

Nota

Los operadores de consulta se admiten en este extremo de la operación del servicio porque el método devuelve una instancia de IQueryable<T>.

<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
[WebGet]
public IQueryable<Order> GetOrdersByCity(string city)
{     
    if (string.IsNullOrEmpty(city))
    {
        throw new ArgumentNullException("city",
            "You must provide a value for the parameter'city'.");
    }

    // Get the ObjectContext that is the data source for the service.
    NorthwindEntities context = this.CurrentDataSource;

    try
    {

        var selectedOrders = from order in context.Orders.Include("Order_Details")
                             where order.Customer.City == city                                    
                             select order;

        return selectedOrders;
    }
    catch (Exception ex)
    {
        throw new ApplicationException(string.Format(
            "An error occurred: {0}", ex.Message));
    }
}

Vea también

Otros recursos

Servicio de datos (WCF Data Services)