是否有可能使用Javascript对WCF服务执行跨站点调用?跨站点ajax调用WCF服务
我不介意它是POST还是GET。
但我听说这几天,浏览器不允许跨站点使用POST或GET调用。
我怎样才能规避这一点,仍然叫WCF服务?
是否有可能使用Javascript对WCF服务执行跨站点调用?跨站点ajax调用WCF服务
我不介意它是POST还是GET。
但我听说这几天,浏览器不允许跨站点使用POST或GET调用。
我怎样才能规避这一点,仍然叫WCF服务?
为了规避浏览器的跨站点脚本拦截器,你可以做很多事情。这些阻止程序阻止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没有它自己的跨站点脚本的限制。
你是否在使用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/remote-json-jsonp/
让我知道如何去!
要在Ben的答案扩大......我扩展了我们的WCF服务支持JSONP使用类似的代码从微软这个例子从jQuery的电话:
新的W3C建议正在标准化,以允许跨 - 通过Access Control for Cross-Site Requests规范在可信方之间进行现场请求。
这需要服务器提供合适的访问控制HTTP标头以及能够理解此类标头并对其采取行动的浏览器。简而言之,如果远程主机说它喜欢你的域名,并且浏览器理解这意味着什么,你可以对该主机执行xmlHttpRequests,而不管相同的源策略如何。
目前很少有浏览器支持此功能。 IE8显然(我没有测试过)和Firefox 3.1(我已经广泛测试过)。我期望其他浏览器能很快适应。
你不应该指望充分采用兼容的浏览器直到2012年最早。
这是解决这一问题的最终解决方案。它的缺点是等待几年后才能用于主流应用。
如果这是你完全控制,如内联网,你可以决定使用哪种浏览器,在这里你可以配置多台服务器发出正确的头的环境中使用,它完美的作品。
你怎么能做到这一点?我使用完全相同的代码示例,但是当我试图把它融入我的申请,我被困在web.config中的端点。即使我从样本中复制了所有绑定,但我仍然收到关于缺少“绑定”的错误。 – Jonathan 2009-02-21 05:34:44