martedì 28 giugno 2011

ASP.NET: Configurazione di WCF per REST con JSON

Da Peter Vogel

Nell'articolo di questo mese nella versione stampata di Visual Studio Magazine (
WCF e Service Oriented Architecture ), ho guardato i componenti principali di una Service Oriented Architecture (SOA) e ha mostrato come utilizzare Visual Studio 2010 e WCF 4 a implementare tali componenti. Per inserire tutto nello spazio disponibile, ho appena dato i punti salienti per l'integrazione di AJAX-con-REST e JSON-servizi in un'applicazione ASP.NET. In questa colonna si riempie nei dettagli.

Quick Review
Nell'articolo ho descritto come convertire un'applicazione ASP.NET esistente da utilizzare REST-con-JSON. È possibile aggiungere questi tag al file web.config


E questi tag all'interno dell'elemento system.webServer:

 

Si aggiunge anche riferimenti al System.ServiceModel.Web e biblioteche System.ServiceModel.Activation. Infine, si aggiunge un file di classe che comprende i metodi si vuole essere in grado di chiamare dal codice JavaScript. Che la classe ha bisogno di questi attributi:

Le importazioni System.ServiceModel Importazioni System.ServiceModel.Web Importazioni System.ServiceModel.Activation 

Nell'esempio ho usato per l'articolo, avevo un metodo che accetta una singola stringa come parametro e restituisce un oggetto del cliente. Come uno dei metodi che si desidera chiamare, di cui ha bisogno l'attributo WebGet:

Funzione GetCustomer pubblico (CID As String) Come cliente 

Per mappare una URL per il metodo è necessario aggiungere una regola di routing nel file Global.asax del sito. Questo codice lega il MyRESTService classe a qualsiasi URL del sito che inizia con "TheService":

RouteTable.Routes.Add (ServiceRoute Nuovo ("TheService", New WebServiceHostFactory (), GetType (MyRESTService))) 

Supponendo che hai fatto tutto questo lavoro, si dovrebbe essere in grado di testare questo metodo GetCustomer da JavaScript in una pagina ASPX con il metodo getJSON jQuery. In questo esempio, per passare il parametro cid al metodo GetCustomer, ho messo una coppia nome / valore nella URL del servizio:

 

Migliorare URL del Servizio
parametri Mettere nella querystring rende evidente quali valori stanno andando i parametri del metodo. Tuttavia, ci sono alcuni aspetti negativi. I nomi utilizzati nel querystring devono corrispondere ai nomi dei parametri nel metodo, per esempio. Se si ottiene il nome del parametro sbagliato nella querystring il parametro al metodo viene passato nulla. E querystrings fanno più a lungo degli URL

È possibile ignorare entrambi questi problemi integrando i parametri nella URL utilizzato nella richiesta. Un URL che incorpora il cid potrebbe apparire così, ad esempio:

http://localhost:1867/TheService/GetCustomer/A123 

Per specificare che la parte finale di questo URL deve essere contrassegnato come parametro CID, si utilizza la proprietà UriTemplate sul metodo WebGet del metodo. In questo caso, che sarebbe simile a questa:

Funzione GetCustomer pubblico (CID As String) Come Channels.Message 

Questa funzione consente anche di utilizzare un nome diverso nell'URL rispetto al nome del metodo. Per usare un URL che fa riferimento "CustomerById" piuttosto che "GetCustomer", devi utilizzare questo attributo WebGet sul metodo GetCustomer:

Funzione GetCustomer pubblico (CustomerId As String) Come Channels.Message 

Per creare un metodo di "default" che richiede solo i parametri nel suo URL, è possibile omettere il nome del metodo da UriTemplate:

Funzione GetCustomer pubblico (CustomerId As String) Come Channels.Message 

Questo metodo potrebbe essere chiamato con questo URL:

http://localhost:1867/TheService/A123 

, Eliminando una fonte di errore (e accorciando gli URL necessari per accedere a un metodo su un servizio) si ha a ricordare l'ordine in cui il parametro deve comparire nella URL. E sostituendo i nomi dei metodi nella URL (o l'omissione di loro) può entrare nel regno della programmazione lavori di sicurezza.

Passare i dati Maggiori
Metodi decorato con WebGet è possibile accedere solo tramite un GET HTTP (ad esempio con un URL nudo, come ho fatto finora). Tuttavia, come ho detto, collegando un sacco di dati nell'URL ha i suoi problemi - per non parlare del dolore di creare un parametro separato sul metodo per ogni coppia nome / valore nella querystring.


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla




Nessun commento:

Posta un commento