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
Öffnen Sie im Northwind-Datendienstprojekt die Datei Northwind.svc.
Definieren Sie in der
Northwind
-Klasse eine Dienstvorgangsmethode mit dem NamenGetOrdersByCity
wie folgt:<WebGet()> _ Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet] public IQueryable<Order> GetOrdersByCity(string city)
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.
Hinweis: |
---|
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);
}
}