我正试图从jQuery客户端访问wcf服务
特别是这个例子 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4
当客户端网页与服务位于同一域时,一切正常
一旦我将客户端网页移动到另一个域,它就会中断。它无法访问服务,请求失败
这适用于所有示例,ASMX,REST和WCF
任何想法如何让这个工作交叉daomain?
答案 0 :(得分:10)
您正在违反同源政策。您正在访问的Web服务必须与发出请求的jQuery脚本位于同一域中。所有浏览器都强制执行此策略,以防止 - 例如 - 对Web应用程序的跨站点脚本和代码注入攻击。
有各种各样的方法,包括JSONP,Proxies或Flash。
在我们建议您应该使用哪种技术之前,我们需要更多信息。我倾向于JSONP。但与此同时,这里有一些轻松的阅读:
http://taossa.com/index.php/2007/02/08/same-origin-policy/
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
以下是JSONP的使用示例:
url = "http://www.test.com/getData.php?callback=parseResults";
document.body.appendChild((function() {
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = url;
return newScript;
})());
function parseResults(data) {
alert(data);
}
答案 1 :(得分:1)
您可能想查看JSONP (JSON with Padding)。简而言之,它涉及向页面添加一个脚本元素,其中Web服务URL作为src。然后,Web服务将JSON包装为回调函数中的第一个参数,该函数在解析脚本时执行。
脚本元素免于Same Origin Policy,这就是他们能够解决这个问题的方法。
答案 2 :(得分:0)
通常,你将无法;现代浏览器限制此操作以防止跨站点脚本攻击。解决它的一种方法可能是使用“填充”JSON,JSONP,它将结果插入到页面上的脚本元素中。有一个Microsoft WCF sample here似乎可以做到这一点。
答案 3 :(得分:0)
我在2天内遇到了同样的问题,我找到了解决方案,并且在google搜索后很优雅。 我需要一些小部件客户端的xss Ajax,它将数据流从层网站拉到我的Rails应用程序。 here's how I did.