Dienstvorgänge (WCF Data Services)

WCF Data Services ermöglicht es Ihnen, Dienstvorgänge für einen Datendienst zu definieren, um Methoden auf dem Server verfügbar zu machen. Wie andere Datendienstressourcen werden Dienstvorgänge durch URIs adressiert. Dienstvorgänge ermöglichen es Ihnen, die Geschäftslogik in einem Datendienst verfügbar zu machen, z. B. um Validierungslogik zu implementieren, rollenbasierte Sicherheit anzuwenden oder spezielle Abfragefunktionen verfügbar zu machen. Dienstvorgänge sind der von DataService abgeleiteten Datendienstklasse hinzugefügte Methoden. Wie allen anderen Datendienstressourcen können der Dienstvorgangsmethode Parameter übergeben werden. Der folgende Dienstvorgang-URI (der auf dem Schnellstart-Datendienst basiert) übergibt z. B. den Wert London an den city-Parameter:

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'

Die Definition für diesen Dienstvorgang lautet wie folgt:

<WebGet()> _
Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet]
public IQueryable<Order> GetOrdersByCity(string city)

Sie können mit der CurrentDataSource des DataService direkt auf die Datenquelle zugreifen, die der Datendienst verwendet. Weitere Informationen finden Sie unter Gewusst wie: Definieren eines Dienstvorgangs (WCF Data Services).

Anforderungen für Dienstvorgänge

Beim Definieren von Dienstvorgängen für den Datendienst gelten folgende Anforderungen. Wenn eine Methode diese Anforderungen nicht erfüllt, wird sie nicht als Dienstvorgang für den Datendienst verfügbar gemacht.

  • Der Vorgang muss eine öffentliche Instanzmethode sein, die ein Member der Datendienstklasse ist.

  • Die Vorgangsmethode akzeptiert möglicherweise nur Eingabeparameter.

  • Wenn Parameter definiert wurden, muss der Typ eines jeden Parameters primitiv sein.

  • Die Methode muss einen der folgenden Werte zurückgeben:

    • void (Nothing in Visual Basic)

    • IEnumerable

    • IQueryable

    • Ein Entitätstyp im Datenmodell, das der Datendienst verfügbar macht.

    • Eine primitive Klasse wie eine ganze Zahl oder Zeichenfolge.

  • Um Abfrageoptionen wie Sortieren, Paging und Filtern zu unterstützen, sollten die Methoden der Dienstvorgänge IQueryable zurückgeben. Anforderungen an Dienstvorgänge, die Abfrageoptionen einschließen, werden für Vorgänge abgelehnt, die nur IEnumerable zurückgeben.

  • Um den Zugriff auf verknüpfte Entitäten mit Navigationseigenschaften zu unterstützen, muss der Dienstvorgang IQueryable zurückgeben.

  • Die Methode muss mit dem Attribut [WebGet] oder [WebInvoke] versehen sein.

    • [WebGet] aktiviert die aufgerufene Methode mit einer GET-Anforderung.

    • [WebInvoke] aktiviert die aufgerufene Methode mit einer POST-Anforderung.

  • Ein Dienstvorgang kann mit dem Attribut SingleResultAttribute versehen sein, das festlegt, dass der Rückgabewert der Methode eine einzige Entität und keine Auflistung von Entitäten ist. Dieser Unterschied schreibt die resultierende Serialisierung der Antwort und die Weise vor, in der zusätzliche Navigationseigenschaftendurchläufe im URI dargestellt werden. Mit der AtomPub-Serialisierung wird z. B. ein einzelner Ressourcentyp als Eingangselement und eine Gruppe von Instanzen als Feed-Element dargestellt.

Adressierung von Dienstvorgängen

Sie können Dienstvorgänge adressieren, indem Sie den Namen der Methode im ersten Pfadsegment eines URI platzieren. Beispielsweise greift der folgende URI auf einen GetOrdersByCity-Vorgang zu, der eine IQueryable-Auflistung von Orders-Objekten, sortiert nach RequiredDate in absteigender Reihenfolge, zusammen mit den verknüpften Order_Details-Objekten zurückgibt:

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$expand=Order_Details&$orderby=RequiredDate desc

In Abhängigkeit vom Rückgabetyp des Dienstvorgangs können dem URI zusätzliche Pfadsegmente oder Abfrageoptionen hinzugefügt werden.

Gültige Rückgabetypen URI-Regeln

void (Nothing in Visual Basic)

- oder -

Entitätstypen

- oder -

Primitive Typen

Der URI muss ein einzelnes Pfadsegment sein, das den Namen des Dienstvorgangs trägt. Abfrageoptionen sind nicht zulässig.

IEnumerable

Der URI muss ein einzelnes Pfadsegment sein, das den Namen des Dienstvorgangs trägt. Da der Ergebnistyp kein IQueryable-Typ ist, sind keine Abfrageoptionen zulässig.

IQueryable

Abfragepfadsegmente zusätzlich zum Pfad, der der Name des Dienstvorgangs ist, sind zulässig. Abfrageoptionen sind ebenfalls zulässig.

Zugriffssteuerung für Dienstvorgänge

Dienstweite Sichtbarkeit der Dienstvorgänge wird durch die SetServiceOperationAccessRule-Methode in der IDataServiceConfiguration-Klasse gesteuert, und zwar auf ähnliche Weise, wie die Sichtbarkeit von Entitätenmengen durch die SetEntitySetAccessRule-Methode gesteuert wird. Die folgende Codezeile in der Datendienstdefinition ermöglicht z. B. den Zugriff auf den CustomersByCity-Dienstvorgang.

config.SetServiceOperationAccessRule( _
    "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule(
    "GetOrdersByCity", ServiceOperationRights.AllRead);
Cc668788.note(de-de,VS.100).gifHinweis:
Wenn ein Dienstvorgang einen Rückgabetyp aufweist, der durch das Beschränken des Zugriff auf die zugrunde liegenden Entitätenmengen ausgeblendet wurde, dann steht der Dienstvorgang Clientanwendungen nicht zur Verfügung.

Weitere Informationen finden Sie unter Gewusst wie: Definieren eines Dienstvorgangs (WCF Data Services).

Siehe auch

Konzepte

Interceptoren (WCF Data Services)