Cómo: Definir una operación de servicio (WCF Data Services)
WCF Data Services 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. Las operaciones del servicio pueden tener acceso al origen de datos subyacente por medio de la propiedad CurrentDataSource en DataService. 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 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
En el proyecto del servicio de datos Northwind, abra el archivo Northwind.svc.
En la clase
Northwind
, defina un método de operación de servicio denominadoGetOrdersByCity
como sigue:<WebGet()> _ Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet] public IQueryable<Order> GetOrdersByCity(string city)
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 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. |
<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("An error occurred: {0}", ex);
}
}