2009-02-17 81 views
3

是否有可能使用Javascript对WCF服务执行跨站点调用?跨站点ajax调用WCF服务

我不介意它是POST还是GET。

但我听说这几天,浏览器不允许跨站点使用POST或GET调用。

我怎样才能规避这一点,仍然叫WCF服务

回答

5

为了规避浏览器的跨站点脚本拦截器,你可以做很多事情。这些阻止程序阻止XMLHTTPRequest发生到任何域,但加载包含脚本或页面的域。

这就是说,有一个常用的解决方法:使用JavaScript编写一个新的进入引用一个src这是一个跨站点URL的DOM。你将所有的RPC方法参数传递给这个“脚本”,它将返回一些将被执行的JavaScript,告诉你成功或失败。

有没有办法做这样一个帖子,在src URL必须是GET,所以你可以传递参数的方式。我不确定WCF是否具有“仅限GET”访问方法。而且,由于浏览器会希望远程标记的结果成为一个有效的JavaScript对象,因此您必须确保您的WCF服务符合此条件,否则您将收到JavaScript错误。

规避跨站点脚本的另一种常用的方法是写你的请求的代理。换句话说,如果您想从example.com上托管的脚本访问域test.com,请在example.com上创建一些URL,以正确的方式将请求代理到test.com。

为了您的例子中,代理很可能是正确的答案,假设WCF没有它自己的跨站点脚本的限制。

1

要在Ben的答案扩大......我扩展了我们的WCF服务支持JSONP使用类似的代码从微软这个例子从jQuery的电话:

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

+0

你怎么能做到这一点?我使用完全相同的代码示例,但是当我试图把它融入我的申请,我被困在web.config中的端点。即使我从样本中复制了所有绑定,但我仍然收到关于缺少“绑定”的错误。 – Jonathan 2009-02-21 05:34:44

2

新的W3C建议正在标准化,以允许跨 - 通过Access Control for Cross-Site Requests规范在可信方之间进行现场请求。

这需要服务器提供合适的访问控制HTTP标头以及能够理解此类标头并对其采取行动的浏览器。简而言之,如果远程主机说它喜欢你的域名,并且浏览器理解这意味着什么,你可以对该主机执行xmlHttpRequests,而不管相同的源策略如何。

目前很少有浏览器支持此功能。 IE8显然(我没有测试过)和Firefox 3.1(我已经广泛测试过)。我期望其他浏览器能很快适应。

你不应该指望充分采用兼容的浏览器直到2012年最早。

这是解决这一问题的最终解决方案。它的缺点是等待几年后才能用于主流应用。

如果这是你完全控制,如内联网,你可以决定使用哪种浏览器,在这里你可以配置多台服务器发出正确的头的环境中使用,它完美的作品。