Procédure : définir une opération de service (WCF Data Services)
Services de données WCF exposent des méthodes définies sur le serveur comme des opérations de service. Les opérations de service permettent à un service de données de fournir l'accès via un URI à une méthode définie sur le serveur. Pour définir une opération de service, appliquez l'attribut [WebGet] ou [WebInvoke] à la méthode. Pour prendre en charge des opérateurs de requête, l'opération de service doit retourner une instance IQueryable<T>. Les opérations de service peuvent accéder à la source de données sous-jacente via la propriété CurrentDataSource sur le DataService<T>. Pour plus d'informations, consultez Opérations de service (WCF Data Services).
L'exemple dans cette rubrique définit une opération de service nommée GetOrdersByCity qui retourne une instance IQueryable<T> filtrée d'objets Orders et Order_Details connexes. L'exemple accède à l'instance ObjectContext qui est la source de données pour l'exemple de service de données Northwind. Ce service est créé lorsque vous complétez le démarrage rapide WCF Data Services.
Pour définir une opération de service dans le service de données Northwind
Dans le projet de service de données Northwind, ouvrez le fichier Northwind.svc.
Dans la classe Northwind, définissez une méthode d'opération de service nommée GetOrdersByCity comme suit :
<WebGet()> _ Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet] public IQueryable<Order> GetOrdersByCity(string city)
Dans la méthode InitializeService de la classe Northwind, ajoutez le code suivant pour permettre l'accès à l'opération de service :
config.SetServiceOperationAccessRule( _ "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule( "GetOrdersByCity", ServiceOperationRights.AllRead);
Pour interroger l'opération de service GetOrdersByCity
Dans un navigateur Web, entrez l'un des URI suivants pour appeler l'opération de service définie dans l'exemple suivant :
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
Exemple
L'exemple suivant implémente une opération de service nommée GetOrderByCity sur le service de données Northwind. Cette opération utilise ADO.NET Entity Framework pour retourner un jeu d'objets Orders et Order_Details connexes comme une instance IQueryable<T> basée sur le nom de ville fourni.
Notes
Les opérateurs de requête sont pris en charge sur ce point de terminaison d'opération de service parce que la méthode retourne une instance 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));
}
}