Procedura: definire un'operazione del servizio (WCF Data Services)
WCF Data Services espone i metodi definiti nel server come operazioni del servizio. Le operazioni del servizio consentono a un servizio dati di fornire l'accesso tramite un URI a un metodo definito nel server. Per definire un'operazione del servizio, applicare l'attributo [WebGet] or [WebInvoke] al metodo. Per supportare gli operatori di query, l'operazione del servizio deve restituire un'istanza di IQueryable. L'accesso ai dati sottostanti da parte delle operazioni del servizio può essere eseguito tramite la proprietà CurrentDataSource su DataService. Per ulteriori informazioni, vedere Operazioni del servizio (WCF Data Services).
Nell'esempio incluso in questo argomento viene definita un'operazione del servizio denominata GetOrdersByCity
che restituisce un'istanza di IQueryable filtrata relativa a Orders
e agli oggetti Order_Details
correlati. Nell'esempio viene eseguito l'accesso all'istanza di ObjectContext che rappresenta l'origine dati per il servizio dati Northwind di esempio. Questo servizio viene creato al completamento della Guida rapida di WCF Data Services.
Per definire un'operazione del servizio nel servizio dati Northwind
Nel progetto del servizio dati Northwind aprire il file Northwind.svc.
Nella classe
Northwind
definire un metodo dell'operazione del servizio denominatoGetOrdersByCity
nel modo seguente:<WebGet()> _ Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet] public IQueryable<Order> GetOrdersByCity(string city)
Nel metodo
InitializeService
della classe Northwind aggiungere il codice seguente per abilitare l'accesso all'operazione del servizio:config.SetServiceOperationAccessRule( _ "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule( "GetOrdersByCity", ServiceOperationRights.AllRead);
Per eseguire una query sull'operazione del servizio GetOrdersByCity
In un browser immettere uno degli URI indicati di seguito per richiamare l'operazione del servizio definita nell'esempio seguente:
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
Esempio
Nell'esempio seguente viene implementa un'operazione del servizio denominata GetOrderByCity
nel servizio dati Northwind. Questa operazione utilizza ADO.NET Entity Framework per restituire un set di oggetti Orders
e di oggetti Order_Details
correlati come istanza di IQueryable in base al nome di città specificato.
![]() |
---|
Gli operatori di query sono supportati su questo endpoint dell'operazione del servizio in quanto il metodo restituisce un'istanza di 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);
}
}