跨站点Ajax调用WCF服务
-
23-08-2019 - |
题
是否有可能做一个跨站点调用,在Javascript,到WCF服务?
如果它是一个POST或GET我不介意。
但我听说这几天,浏览器不允许跨站点有任何POST调用或GET。
如何规避这一点,仍然叫的 WCF服务的?
解决方案
有没有一个整体很多你可以做,以绕过浏览器的跨站点脚本拦截。这些受体阻滞剂停止XMLHttpRequest的情况发生任何域但加载包含脚本或页面的一个。
这是说,有一个常用的解决方法:使用JavaScript编写一个新的进入引用一个src这是一个跨站点URL的DOM。你会通过你的所有RPC方法参数这个“脚本”,它会返回一些JavaScript将要执行的,告诉你成功或失败。
有没有办法做这样一个帖子,在src URL必须是GET,所以你可以传递参数的方式。我不知道如果WCF先后获得了“只得到”的方法。而且,因为浏览器将期望远程标记的结果是一个有效的JavaScript对象,你必须确保你的WCF服务将遵守该为好,否则你会得到JavaScript错误。
绕过跨站点脚本的另一种常见的方法是写为您的请求的代理。换句话说,如果你想从托管在example.com脚本访问域test.com,然后做一些URL example.com上该代理在适当的方式交给test.com请求。
有关您的示例中,代理很可能是正确的答案,假设WCF没有它自己的跨站点脚本的限制。
其他提示
您使用jQuery的任何机会? jQuery的支持使用“JSONP”跨域JSON请求。您将被限制为GET请求,但我已经尝试过了,它工作得很好!这也很简单,让工作。
参见“跨域的getJSON(使用JSONP)”当前页的详细信息,节: http://docs.jquery.com/Release:jQuery_1.2/Ajax
和这里的一对JSONP一些背景: http://bob.pythonmac.org/archives/2005 / 12/05 /远程JSON-JSONP /
让我知道如何去!
新的W3C建议正在标准化,以允许通过访问受信任的各方之间的跨站点请求跨站点控制请求规范。
这需要合适的服务访问控制HTTP标头和一个浏览器可以理解并作用在这样的头部的服务器。
总之,如果一个远程主机说,它喜欢您的域,浏览器明白这意味着什么,你可以对主机进行的XMLHttpRequest无论同源策略的。
目前很少有浏览器支持此功能。 IE8显然不会(我没有测试过)和Firefox 3.1也(我已经广泛使用了这一点)。我希望其他浏览器跟风相当快。
您不应该指望充分采用兼容的浏览器,直到2012年最早的。
这是该问题的最终解决方案。缺点是在等待几年它可以在主流的应用中使用之前。
如果这是你完全控制,如内联网,你可以决定使用哪种浏览器,在这里你可以配置多台服务器发出正确的头的环境中使用,它完美的作品。
要扩大本的答案......我扩展了我们的WCF服务支持JSONP使用类似于微软这个示例代码jQuery的调用: