Как определить операцию службы (службы WCF Data Services)
Службы Службы WCF Data Services предоставляют методы, определенные на сервере, в качестве операций службы. Операции службы позволяют службе данных предоставить доступ через URI к методу, определенному на сервере. Для определения операции службы применить к методу атрибут [WebGet] или [WebInvoke]. Для поддержки операторов запросов операция службы должна возвращать экземпляр IQueryable. Операции службы могут обращаться к базовому источнику данных через свойство CurrentDataSource объекта DataService. Дополнительные сведения см. в разделе Операции службы (службы WCF Data Services).
Пример в этом разделе определяет операцию службы с именем GetOrdersByCity
, возвращающую фильтрованный экземпляр IQueryable Orders
и связанные объекты Order_Details
. Пример обращается к экземпляру ObjectContext, являющемуся источником данных для образца службы данных Northwind. Эта служба создается после выполнения действий, описанных в разделе Краткое руководство по службам WCF Data Services.
Определение операции службы в службе данных Northwind
Откройте в проекте службы данных Northwind файл Northwind.svc.
Определите в классе
Northwind
метод операции службы с именемGetOrdersByCity
, как показано дальше:<WebGet()> _ Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet] public IQueryable<Order> GetOrdersByCity(string city)
Добавьте в метод
InitializeService
класса Northwind следующий код, разрешающий доступ к операции службы:config.SetServiceOperationAccessRule( _ "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule( "GetOrdersByCity", ServiceOperationRights.AllRead);
Запрос к операции службы GetOrdersByCity
Введите в веб-обозревателе один из следующих URI для вызова операции службы, определенной в следующем примере:
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
Пример
В следующем примере реализована операция службы с именем GetOrderByCity
в службе данных Northwind. Эта операция использует ADO.NET Entity Framework для возвращения набора сущностей Orders
и связанных объектов Order_Details
в виде экземпляра IQueryable на основе переданного названия города.
Примечание |
---|
Операторы запросов поддерживаются для этой конечной точки операции службы, потому что метод возвращает экземпляр 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);
}
}