4 pagine in totale: <<Indietro 1 [2] 3 4 Avanti >>
UriTemplate e UriTemplateTable
Il modello oggetto di WCF si è esteso con due nuove classi: UriTemplate e UriTemplateTable. Il loro scopo è quello di parametrizzare e gestire indirizzi (URI), permettendo di estrapolare informazioni.
Esempi di template URI possono essere i seguenti:
products/{idProduct}
products/{idCategory}/{likeName}Mediante graffe si indica la posizione e il nome del parametro, e con WCF il template lo si può rappresentare in questo modo:
UriTemplate pruductsUriTemplate = new UriTemplate("products/{idCategory}/{likeName}");La classe UriTemplate dispone dei metodi BindByName e BindByPosition per sostituire i placeholder con dei valori e creare un URI, gestendo inoltre gli eventuali encoding dei valori:
Uri baseUri = new Uri("http://www.aspitalia.com");
// Creo la lista dei parametri
NameValueCollection pParams = new NameValueCollection();
pParams.Add("idCategory", 5);
pParams.Add("likeName", "trattori");
Uri productsUri = pruductsUriTemplate.BindByName(baseUri, pParams);
// productsUri = "http://www.aspitalia.com/products/5/trattori
La classe dispone inoltre del metodo Match per recuperare i valori dei parametri, dato un URI completo:
UriTemplateMatch results = pruductsUriTemplate.Match(
new Uri("http://www.aspitalia.com/products/1/auto"));
// Recupero i parametri
string idCategory = results.BoundVariables["idCategory"];
string likeName = results.BoundVariables["likeName"];
Questi oggetti si trovano nel namespace System dell'assembly System.ServiceModel.Web.dll e il loro uso è piuttosto semplice.
REST e POX
REST (Representational State Transfer) e POX (Plain Old XML) sono un modo semplice per estendere le capacità del web, non limitandolo al semplice HTML, ma sfruttando appieno le capacità di HTTP. Questo protocollo prevede infatti dei metodi e REST semplicemente propone di usarli per fornire principalmente le classiche operazioni CRUD (Create, Read, Update, Delete). Le richieste GET, POST, DELETE, PUT sono adatte a questo scopo, mentre POX, che in pratica è un XML semplice, è l'eventuale contenuto della richiesta o della risposta.
In WCF 3.5 è possibile realizzare servizi che siano in grado di soddisfare richieste REST pur non cambiando l'approccio della definizione e dell'implementazione. Gli attributi WebGetAttribute e WebInvokeAttribute permettono di decorare un metodo indicando se tale operazione viene richiamata tramite richiesta GET e/o POST/PUT/DELETE indicando inoltre come i parametri vengono caricati. Ecco un esempio per richiamare il servizio in esame in questo articolo, passando l'ID del prodotto in querystring sfruttando gli UriTemplate visti in precedenza:
public interface IProducts{
[WebGet(UriTemplate = "Product?id={idProduct}",
BodyStyle = WebMessageBodyStyle.Bare)]
ProductGetResponse Get(Int32 idProduct);
}
La conversione dei parametri è automatica, affidata al QueryStringConverter, consentendo di chiamare il servizio con una richiesta simile alla seguente:
http://www.aspitalia.com/ProductsService.svc/ Product?id=1Questa tecnica risulta molto più comoda rispetto allo sviluppo di un HttpHandler e più ordinata, perché basata sull'architettura di WCF: non esclude infatti di poter utilizzare il servizio contemporaneamente su altri endPoint e binding diversi.
Oltre all'UriTemplate, sull'attributo WebGet è inoltre possibile controllare la formattazione della richiesta e della risposta mediante le proprietà RequestFormat e ResponseFormat. E' possibile infatti passare, sia in GET che in POST, parametri in formato XML o JSON, consentendo di passare quindi anche oggetti complessi, ovviamente nei limiti del protocollo HTTP.
Il binding da utilizzare è sempre il webHttpBinding, ma sul behavior occorre abilitare webHttp (classe WebHttpBehavior):
<behaviors>
<endpointBehaviors>
<behavior name="AspNetAjaxBehavior">
<webHttp/>
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
4 pagine in totale: <<Indietro 1 [2] 3 4 Avanti >>
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà

Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
