Domanda

E 'possibile fare una chiamata cross-site, in Javascript, per un servizio WCF?

Non mi importa se si tratta di un POST o GET.

Ma ho sentito che in questi giorni, i browser non consentono di cross-site chiamate sia con POST o GET.

Come posso aggirare questo e ancora chiamare un servizio WCF

È stato utile?

Soluzione

Non c'è un bel po 'si può fare per aggirare cross-site scripting bloccanti del suo navigatore web. Quei bloccanti fermano XMLHttpRequest di accada a qualsiasi dominio, ma quello che ha caricato lo script contenenti o pagina.

Detto questo, c'è una soluzione comunemente usata: Usa JavaScript per scrivere una nuova voce nel DOM che fa riferimento a uno src che è un URL cross-site. Si passa tutti i tuoi argomenti del metodo RPC a questo "script" che restituirà alcuni JavaScript che verrà eseguito, che indica il successo o il fallimento.

Non c'è modo di fare un post in questo modo, l'URL src deve essere un GET, in modo da poter passare gli argomenti in questo modo. Non sono sicuro se WCF ha un "GET" metodo di accesso. E, dal momento che il browser si aspettano il risultato del tag remoto per essere un oggetto JavaScript valida, si dovrà fare in modo che il vostro servizio WCF obbedisce che pure, altrimenti si otterrà errori JavaScript.

Un altro metodo comune di aggirare cross-site scripting è quello di scrivere un proxy per le vostre richieste. In altre parole, se si desidera accedere dominio test.com da script ospitati su example.com, quindi fare qualche URL su example.com che i proxy la richiesta verso test.com in modo corretto.

Per il vostro esempio, il proxy è probabile che la risposta giusta, partendo dal presupposto che WCF non disponga di un proprio restrizioni cross-site scripting.

Altri suggerimenti

Si sta utilizzando jQuery per caso? jQuery supporta le richieste tra domini JSON utilizzando "JSONP". Si sarà limitato a richieste GET, ma ho provato fuori e funziona bene! E 'anche molto semplice da far funzionare.

Vedere la "Cross-Domain getJSON (usando JSONP)" a questa pagina per ulteriori informazioni: http://docs.jquery.com/Release:jQuery_1.2/Ajax

Ed ecco qualche informazione su JSONP: http://bob.pythonmac.org/archives/2005 / 12/05 / remoto json-jsonp /

Fatemi sapere come va!

Le nuove raccomandazioni W3C sono state standardizzate per consentire le richieste cross-site di fiducia tra le parti tramite il Accesso controllo per Cross-Site Richieste specifiche .

Questo richiede un server che serve adatti intestazioni HTTP controllo di accesso e di un browser in grado di comprendere e di agire su tali intestazioni.

In breve, se un host remoto dice che gli piace il vostro dominio, e un browser capisce che cosa questo significa, è possibile eseguire XMLHttpRequests contro che ospitano a prescindere dalla stessa politica di origine.

Al momento pochissimi browser supportano questa funzionalità. IE8 a quanto pare fa (non ho provato) e Firefox 3.1 non (ho testato questa ampiamente). Mi aspetto che gli altri browser a seguirne l'esempio abbastanza rapidamente.

Non si deve aspettare l'adozione sufficiente di browser compatibili fino al 2012 al più presto.

Questa è la soluzione definitiva al problema. Il rovescio della medaglia è in attesa di qualche anno prima che possa essere utilizzato in applicazioni mainstream.

Se questo è per l'uso in un ambiente di controllare completamente, come ad un'intranet dove è possibile determinare quale browser utilizzato e dove è possibile configurare più server per emettere le intestazioni corrette, funziona perfettamente.

Per espandere sulla risposta di Ben ... ho esteso il nostro servizio WCF per sostenere JSONP chiamate da jQuery utilizzando codice simile a questo esempio di Microsoft:

http://msdn.microsoft.com/en-us/library /cc716898.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top