Operazioni del servizio (WCF Data Services)
WCF Data Services consente di definire operazioni del servizio in un servizio dati per esporre metodi nel server. Allo stesso modo di altre risorse del servizio dati, le operazioni del servizio vengono indirizzate mediante URI. Le operazioni del servizio consentono di esporre la logica di business in un servizio dati, ad esempio per implementare la logica di convalida, per applicare la sicurezza basata sui ruoli o per esporre funzionalità di query specializzate. Le operazioni del servizio sono metodi aggiunti alla classe del servizio dati che deriva da DataService. Analogamente a tutte le altre risorse del servizio dati, è possibile fornire parametri al metodo dell'operazione del servizio. L'URI dell'operazione del servizio seguente, basato sul servizio dati della Guida rapida, passa ad esempio il valore London
al parametro city
:
https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'
La definizione per questa operazione del servizio è la seguente:
<WebGet()> _
Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet]
public IQueryable<Order> GetOrdersByCity(string city)
È possibile utilizzare la proprietà CurrentDataSource dell'oggetto DataService per accedere direttamente all'origine dati utilizzata dal servizio dati. Per ulteriori informazioni, vedere Procedura: definire un'operazione del servizio (WCF Data Services).
Requisiti delle operazioni del servizio
I requisiti seguenti si applicano in caso di definizione di operazioni del servizio nel servizio dati. Se un metodo non soddisfa questi requisiti, non verrà esposto come operazione del servizio per il servizio dati.
L'operazione deve essere un metodo di istanza pubblica, ovvero un membro della classe del servizio dati.
È possibile che il metodo dell'operazione accetti solo parametri di input.
Se sono definiti parametri, il tipo di ogni parametro deve essere primitivo.
Il metodo deve restituire uno degli elementi seguenti:
void (Nothing in Visual Basic)
Un tipo di entità nel modello di dati esposto dal servizio dati.
Una classe primitiva, ad esempio Integer o stringa.
Per supportare opzioni di query di ordinamento, paging e filtro, i metodi delle operazioni del servizio devono restituire IQueryable. Le richieste a operazioni del servizio che includono opzioni di query vengono rifiutate per le operazioni che restituiscono solo IEnumerable.
Per supportare l'accesso alle entità correlate tramite le proprietà di navigazione, l'operazione del servizio deve restituire IQueryable.
Il metodo deve essere annotato con l'attributo
[WebGet]
o[WebInvoke]
.[WebGet]
abilita il metodo da richiamare tramite una richiesta GET.[WebInvoke]
abilita il metodo da richiamare tramite una richiesta POST.
Un'operazione del servizio può essere annotata con SingleResultAttribute che specifica che il valore restituito dal metodo è una singola entità anziché una raccolta di entità. Questa distinzione determina la serializzazione della risposta e il modo in cui gli attraversamenti delle proprietà di navigazione aggiuntivi vengono rappresentati nell'URI. Ad esempio, quando si utilizza la serializzazione AtomPub, una singola istanza del tipo di risorsa viene rappresentata come elemento entry e un set di istanze come elemento feed.
Indirizzamento delle operazioni del servizio
È possibile indirizzare le operazioni del servizio inserendo il nome del metodo nel primo segmento di percorso di un URI. Ad esempio, l'URI riportato di seguito consente l'accesso a un'operazione GetOrdersByCity
che restituisce una raccolta IQueryable di oggetti Orders
ordinati in ordine decrescente in base a RequiredDate
insieme agli oggetti Order_Details
correlati:
https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$expand=Order_Details&$orderby=RequiredDate desc
A seconda del tipo restituito dell'operazione del servizio, è possibile aggiungere all'URI segmenti di percorso o opzioni di query aggiuntive.
Tipi restituiti validi | Regole URI |
---|---|
void (Nothing in Visual Basic) - oppure - Tipi di entità - oppure - Tipi primitivi |
L'URI deve essere costituito da un singolo segmento di percorso corrispondente al nome dell'operazione del servizio. Le opzioni di query non sono consentite. |
IEnumerable |
L'URI deve essere costituito da un singolo segmento di percorso corrispondente al nome dell'operazione del servizio. Poiché il tipo di risultato non è un tipo IQueryable, le opzioni di query non sono consentite. |
IQueryable |
Oltre al percorso corrispondente al nome dell'operazione del servizio, sono consentiti segmenti di percorso di query. Sono consentite anche le opzioni di query. |
Controllo di accesso alle operazioni del servizio
La visibilità a livello di servizio delle operazioni del servizio viene controllata dal metodo SetServiceOperationAccessRule sulla classe IDataServiceConfiguration pressoché nello stesso modo in cui viene controllata la visibilità del set di entità tramite il metodo SetEntitySetAccessRule. Ad esempio, la riga di codice seguente nella definizione del servizio dati abilita l'accesso all'operazione del servizio CustomersByCity
.
config.SetServiceOperationAccessRule( _
"GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule(
"GetOrdersByCity", ServiceOperationRights.AllRead);
Nota: |
---|
Se un'operazione del servizio dispone di un tipo restituito nascosto mediante limitazione dell'accesso nei set di entità sottostanti, l'operazione del servizio non sarà disponibile alle applicazioni client. |
Per ulteriori informazioni, vedere Procedura: definire un'operazione del servizio (WCF Data Services).