Frage

Ist es möglich, einen Cross-Site-Anruf, in Javascript, zu einem WCF-Dienst zu tun?

ich nichts dagegen, wenn es sich um eine POST oder GET ist.

Aber ich habe gehört, dass in diesen Tagen, Browser erlauben keine Cross-Site mit entweder POST oder GET ruft.

Wie kann ich umgehen diese und rufen immer noch ein WCF-Dienst

War es hilfreich?

Lösung

Es gibt nicht viel Sie tun können, den Browser des Cross-Site-Scripting-Blocker zu umgehen. Diese Blocker stoppen XMLHTTPRequest das geschieht für alle Domain aber derjenige, der das Skript enthält, oder eine Seite geladen.

Das heißt, es ist eine häufig verwendete Abhilfe: Verwenden Sie JavaScript um einen neuen Eintrag in das DOM zu schreiben, die eine src verweist, die eine Cross-Site-URL ist. Sie werden alle Ihre RPC-Methode Argumente für diese „Skript“ übergeben, die einige JavaScript zurück, die ausgeführt wird, Sie Erfolg oder Misserfolg zu erzählen.

Es gibt keinen Weg, eine POST auf diese Weise zu tun, muss die src URL ein GET, so dass Sie Argumente, die Art und Weise passieren können. Ich bin mir nicht sicher, ob WCF eine „GET nur“ Methode des Zugriff hat. Und da der Browser das Ergebnis des Remote-Tages erwartet ein gültiges JavaScript-Objekt sein, werden Sie sicher machen müssen, dass Ihr WCF-Dienst folgt, dass auch, sonst werden Sie JavaScript-Fehler erhalten.

Eine andere gebräuchliche Methode Cross-Site-Scripting-Umgehung ist ein Proxy für Ihre Anfragen zu schreiben. Mit anderen Worten, wenn Sie Domäne test.com von Skripts auf example.com gehostet zugreifen wollen, dann einige URL machen auf example.com, dass Proxies die Anfrage über test.com in der richtigen Art und Weise.

Für Ihr Beispiel ist das proxying wahrscheinlich die richtige Antwort, unter der Annahme, dass WCF nicht, dass es hat eigene Cross-Site-Scripting-Einschränkungen.

Andere Tipps

Sind Sie mit jQuery durch Zufall? jQuery unterstützt domänenübergreifender JSON-Anfragen mit „JSONP“. Sie werden begrenzt sein, um Anfragen zu bekommen, aber ich habe es ausprobiert und es funktioniert gut! Es ist auch sehr einfach zum Laufen zu bringen.

Sehen Sie den "Cross-Domain getJSON (mit JSONP)" Abschnitt auf dieser Seite für Details: http://docs.jquery.com/Release:jQuery_1.2/Ajax

Und hier ist etwas Hintergrund auf JSONP: http://bob.pythonmac.org/archives/2005 / 12/05 / Remote-json-JSONP /

Lassen Sie mich wissen, wie es geht!

New W3C Empfehlungen werden standardisierte Anfragen Cross-Site über die Zugang Steuerung für Cross-Site Requests Spezifikation.

Dies erfordert einen Server geeignet Access Control HTTP-Header und einen Browser, der das Verständnis und die Einwirkung auf solche Header dient.

Kurz gesagt, wenn eine Remote-Host, sagt sie Ihre Domain mag, und ein Browser versteht, was das bedeutet, Sie XMLHttpRequests gegen diesen Host unabhängig von der Same Origin Policy durchführen können.

Zur Zeit nur sehr wenige Browser unterstützen diese Funktionalität. IE8 hat offenbar (ich habe es nicht getestet) und Firefox 3.1 ist (ich habe diese ausgiebig getestet). Ich erwarte, dass andere Browser Anzug ganz schnell folgen.

Sie sollten nicht ausreichend Festlegung kompatibler Browser bis zum Jahr 2012 erwarten frühestens.

Das ist die ultimative Lösung für das Problem. Der Nachteil ist ein paar Jahre warten, bevor sie in den Mainstream-Anwendungen verwendet werden.

Wenn dies für die Verwendung in einer Umgebung, die Sie vollständig steuern, wie für ein Intranet, wo Sie bestimmen können, welcher Browser verwendet wird und wo Sie mehrere Server konfigurieren können, die richtigen Header ausstellen, es funktioniert perfekt.

auf Bens Antwort erweitern ... erweiterte ich unseren WCF-Dienst JSONP Anrufe von jQuery Code ähnlich dieses Beispiel von Microsoft zu unterstützen:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top