来自网站客户端脚本的 WCF RESTful 服务跨域访问

Posted

技术标签:

【中文标题】来自网站客户端脚本的 WCF RESTful 服务跨域访问【英文标题】:WCF RESTful Service Cross Domain Access from Web Site Client Side Scripts 【发布时间】:2012-04-23 18:52:55 【问题描述】:

我正在使用 VS 2010 IDE 开发 WCF RESTful 服务,在研究期间,我们被告知 API 将部署在站点托管的同一域中,例如。

API 托管: www.site.com/API/services.svc(API 是一个虚拟文件夹)

网站托管: www.site.com

由于我们的网站将使用我们计划在同一域中部署的客户端 ajax 使用相同的 API,因此不会出现跨域/源访问问题。

但是,稍后会发生变化,iPad、iPhone 和智能电视应用程序将使用相同的 API,因为我们计划将 API 部署在名为 www 的单独域中的 API 会有巨大的流量。 api.com/services.svc 它对所有设备应用程序的响应都很好,但是我们在网站上遇到了问题,因为它是来自客户端的跨域访问。经过搜索,我发现代码可以在 API 中破坏此跨域策略,如下所示,通过在 Global.asax 文件 Application_BeginRequest() 中实现以下代码,它在 Chrome、Firefox 和 Safari 浏览器中响应良好,但在 IE 中没有响应

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "x-requested-with");
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "OPTIONS")

HttpContext.Current.Response.AddHeader("X-DR-Request-Terminated-By", "CrossDomainXhr-OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();

请帮我解决这个问题...

提前谢谢...

萨蒂什

【问题讨论】:

【参考方案1】:

据我所知,IE 不允许在

中使用“*”
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");  

尝试指定域。您也可以参考这里:Access-Control-Origin in IE

【讨论】:

非常感谢您的回答,它非常有帮助,请指导我如何允许多个域的 Access-Control-Allow-Origin,我尝试使用 (,) 分隔域,但它不工作

以上是关于来自网站客户端脚本的 WCF RESTful 服务跨域访问的主要内容,如果未能解决你的问题,请参考以下文章

WCF Restful Web 服务客户端限制

使用 WCF 客户端访问 RESTful 服务时访问 HTTP 状态代码

WCF的Restful和TCP方式调用性能比较

WCF RESTFul服务中的异常处理

RESTful WCF 4 服务中移动客户端的用户身份验证

Restful WCF 服务和 LINQ