Поделиться через


Как определить операцию службы (службы 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

  1. Откройте в проекте службы данных Northwind файл Northwind.svc.

  2. Определите в классе Northwind метод операции службы с именем GetOrdersByCity, как показано дальше:

    <WebGet()> _
    Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
    
    [WebGet]
    public IQueryable<Order> GetOrdersByCity(string city)
    
  3. Добавьте в метод 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 на основе переданного названия города.

Dd744841.note(ru-ru,VS.100).gifПримечание
Операторы запросов поддерживаются для этой конечной точки операции службы, потому что метод возвращает экземпляр 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);
    }
}

См. также

Другие ресурсы

Определение службы WCF Data Services