Question

Est-il possible de faire un appel cross-site, en Javascript, à un service WCF?

Je ne me dérange pas si c'est un POST ou GET.

Mais j'ai entendu dire que ces jours-ci, les navigateurs ne permettent pas les appels intersites avec POST ou GET.

Comment puis-je contourner cela et encore appeler un service WCF

Était-ce utile?

La solution

Il n'y a pas beaucoup que vous pouvez faire pour contourner les bloqueurs de script inter-site du navigateur. Ces bloqueurs cessent XMLHTTPRequest de d'arriver à tous les domaines, mais celui qui a chargé le script contenant ou page.

Cela dit, il y a une solution couramment utilisée: utiliser JavaScript pour écrire une nouvelle entrée dans le DOM qui fait référence à une src qui est une URL intersite. Vous passerez tous vos arguments de méthode RPC à ce « script » qui retournera un peu de JavaScript qui sera exécuté, vous indiquant le succès ou l'échec.

Il n'y a pas moyen de faire un POST de cette manière, l'URL src doit être un GET, de sorte que vous pouvez transmettre des arguments de cette façon. Je ne sais pas si WCF a une méthode « GET seulement » d'accès. Et, étant donné que le navigateur attendre le résultat de la balise à distance pour être un objet JavaScript valide, vous devez vous assurer que votre service WCF obéit à cela aussi bien, sinon vous obtiendrez des erreurs JavaScript.

Une autre méthode commune de contourner les scripts inter-sites est d'écrire un proxy pour vos demandes. En d'autres termes, si vous voulez accéder domaine test.com à partir de scripts hébergés sur example.com, puis faire un peu d'URL sur example.com que les procurations de la demande vers test.com de la bonne façon.

Pour exemple, le mandatement est probablement la bonne réponse, en supposant que WCF ne l'ont pas ses propres restrictions de cross-site scripting.

Autres conseils

Utilisez-vous jQuery par hasard? jQuery supporte les requêtes inter-domaines en utilisant JSON « JSONP ». Vous serez limité aux demandes GET, mais je l'ai essayé dehors et il fonctionne bien! Il est également très simple à faire fonctionner correctement.

Voir la section "getJSON (en utilisant JSONP) Cross-Domain" sur cette page pour plus de détails: http://docs.jquery.com/Release:jQuery_1.2/Ajax

Et voici quelques informations générales sur JSONP: http://bob.pythonmac.org/archives/2005 / 12/05 / JSON-jsonp à distance /

Permettez-moi de savoir comment il va!

Les nouvelles recommandations du W3C sont en cours de normalisation pour autoriser les demandes intersites entre les parties de confiance via le Accès contrôle de Cross-site Demandes spécifications.

Cela nécessite un serveur HTTP au service des en-têtes appropriés de contrôle d'accès et d'un navigateur capable de comprendre et d'agir sur ces en-têtes.

En bref, si un hôte distant dit qu'il aime votre domaine, et un navigateur comprend ce que cela signifie, vous pouvez effectuer XMLHttpRequests contre cet hôte quelle que soit la règle d'origine.

À l'heure actuelle très peu navigateurs prennent en charge cette fonctionnalité. IE8 ne semble (je ne l'ai pas testé) et Firefox 3.1 ne (je l'ai testé intensivement). Je pense d'autres navigateurs à suivre cet exemple assez rapidement.

Vous ne devriez pas attendre l'adoption suffisante des navigateurs compatibles jusqu'en 2012 au plus tôt.

C'est la solution ultime au problème. L'inconvénient est d'attendre quelques années avant de pouvoir être utilisé dans des applications grand public.

Si cela est pour une utilisation dans un environnement que vous contrôlez entièrement, comme pour un intranet où vous pouvez déterminer quel navigateur est utilisé et où vous pouvez configurer plusieurs serveurs pour délivrer les en-têtes corrects, il fonctionne parfaitement.

Pour développer la réponse de Ben ... J'ai étendu notre service WCF pour soutenir JSONP appels de jQuery en utilisant un code similaire à cet exemple de Microsoft:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top