Gewusst wie: Definieren eines Dienstvorgangs (WCF Data Services)

WCF Data Services macht auf dem Server als Dienstvorgänge definierte Methoden verfügbar. Dienstvorgänge ermöglichen einem Datendienst das Bereitstellen von Zugriff über einen URI auf eine Methode, die auf dem Server definiert ist. Wenden Sie das [WebGet]-Attribut oder [WebInvoke]-Attribut auf die Methode an, um einen Dienstvorgang zu definieren. Der Dienstvorgang muss eine IQueryable-Instanz zurückgeben, um Abfrageoperatoren zu unterstützen. Dienstvorgänge können unter Umständen über die CurrentDataSource-Eigenschaft für den DataService auf die zugrunde liegende Datenquelle zugreifen. Weitere Informationen finden Sie unter Dienstvorgänge (WCF Data Services).

Im Beispiel in diesem Thema wird ein Dienstvorgang mit dem Namen GetOrdersByCity definiert, der eine gefilterte IQueryable-Instanz des Orders-Objekts und des verknüpften Order_Details-Objekts zurückgibt. Im Beispiel wird auf die ObjectContext-Instanz zugegriffen, die die Datenquelle für den Northwind-Beispieldatendienst ist. Dieser Dienst wird erstellt, wenn Sie den WCF Data Services-Schnellstart ausführen.

So definieren Sie einen Dienstvorgang im Northwind-Datendienst

  1. Öffnen Sie im Northwind-Datendienstprojekt die Datei Northwind.svc.

  2. Definieren Sie in der Northwind-Klasse eine Dienstvorgangsmethode mit dem Namen GetOrdersByCity wie folgt:

    <WebGet()> _
    Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
    
    [WebGet]
    public IQueryable<Order> GetOrdersByCity(string city)
    
  3. Fügen Sie in der InitializeService-Methode der Northwind-Klasse den folgenden Code hinzu, um den Zugriff auf den Dienstvorgang zu aktivieren:

    config.SetServiceOperationAccessRule( _
        "GetOrdersByCity", ServiceOperationRights.AllRead)
    
    config.SetServiceOperationAccessRule(
        "GetOrdersByCity", ServiceOperationRights.AllRead);
    

So fragen Sie den GetOrdersByCity-Dienstvorgang ab

  • Geben Sie in einem Webbrowser einen der folgenden URIs ein, um den Dienstvorgang aufzurufen, der im folgenden Beispiel definiert wird:

    • 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

Beispiel

Im folgenden Beispiel wird ein Dienstvorgang mit dem Namen GetOrderByCity im Northwind-Datendienst implementiert. In diesem Vorgang wird ADO.NET Entity Framework verwendet, um eine Reihe von Orders-Objekten und verknüpften Order_Details-Objekten als IQueryable-Instanz basierend auf dem angegebenen Namen der Stadt zurückzugeben.

Dd744841.note(de-de,VS.100).gifHinweis:
Abfrageoperatoren werden an diesem Dienstvorgangsendpunkt unterstützt, da die Methode eine IQueryable-Instanz zurückgibt.

<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);
    }
}

Siehe auch

Weitere Ressourcen

Definieren von WCF Data Services