59 messaggi dal 18 ottobre 2012
Salve,
ho scritto il mio primo Web Service asmx e una paginetta per richiamarlo con JQuery.

Funziona tutto bene, ma quando provo a richiamarlo dalla stessa pagina, messa sotto un altro dominio (con i dovuti cambiamenti) non funziona più niente.

Come posso risolvere?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

Ginus82 ha scritto:

non funziona più niente.

Già, sei vincolato dalla same-origin policy che ti impedisce, lato client, di consumare risorse ospitate in altri domini.

In questi casi ci sono un paio di soluzioni:
  • JSONP. Normalmente, quando jQuery invia una richiesta ajax, sfrutta l'oggetto XmlHttpRequest che è limitato dai vincoli che hai riscontrato. jQuery, tuttavia, può andare a leggere il tuo servizio ASMX anche in un altro modo, usando una tecnica che non è vincolata dalla same-origin policy. Questa tecnica prevede l'uso di tag <script> iniettati dinamicamente nel DOM ma, affinché tutto ciò funzioni, devi adeguare il tuo servizio affinché in quella situazione restituisca JSONP anziché JSON. Si tratta semplicemente di "avvolgere" una chiamata a funzione attorno all'oggetto JSON che il tuo servizio restituirebbe normalmente. Es. callback({'Nome':'Mario'}) anziché il solito {'Nome':'Mario'}
    In un servizio ASMX questo lo puoi fare scrivendoti un HttpModule, come vedi fare qui:
    http://bloggingabout.net/blogs/adelkhalil/archive/2009/08/14/cross-domain-jsonp-with-jquery-call-step-by-step-guide.aspx
    Poi dovrai effettuare una richiesta di tipo JSONP con jQuery. Per questo segui la documentazione:
    http://api.jquery.com/jQuery.getJSON/#jsonp
  • CORS, acronimo di "Cross origin resource sharing". E' un sistema per aggiungere delle eccezioni alla same-origin policy, in modo che l'uso del servizio ASMX sia autorizzato anche da altri domini scelti da te (o da tutti). Il tuo codice javascript e il servizio ASMX resteranno immutati, quello che devi fare è inserire determinate intestazioni nella risposta web del servizio. Qui trovi una guida:
    http://encosia.com/using-cors-to-access-asp-net-services-across-domains/
    Attenzione, perché CORS è una specifica del W3C che ha raggiunto lo status di Candidate Recommendation solo lo scorso gennaio e perciò non riuscirai a farlo funzionare su tutti i browser, specialmente con Internet Explorer fino alla versione 9, compresa.
    O meglio, IE8 e IE9 hanno un supporto parziale ma con delle grosse, grosse limitazioni come puoi leggere qui:
    http://stackoverflow.com/questions/11487216/cors-with-jquery-and-xdomainrequest-in-ie8-9


ciao
Modificato da BrightSoul il 08 aprile 2013 22.19 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.