调用WCF跨域的问题

时间:2012-06-18 22:36:43

标签: javascript wcf web-services soap

我正在尝试使用javascript通过http。

调用WCF服务跨域

我已将 Access-Control-Allow-Origin 标头添加到我想要调用的操作中:

WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");

然而,当我使用jquery.ajax发布时,我得到:

Origin http://server/ is not allowed by Access-Control-Allow-Origin.

更糟糕的是它甚至发生在我的本地机器上:

XMLHttpRequest cannot load http://localhost:8201/wcfservice. Origin http://localhost/ is not allowed by Access-Control-Allow-Origin. (observed in Chrome)
我在做一些根本错误的事情吗?

1 个答案:

答案 0 :(得分:1)

您正在做的事情适用于GET请求(在支持CORS的浏览器中) - 请求被发送到服务,如果服务具有Access-Control-Allow-,浏览器将把它返回给应用程序Origin header)。

对于“不安全”请求(即可能导致服务中出现副作用的请求,例如POST,PUT和DELETE),浏览器首先发送预检请求,OPTIONS请求“询问”服务是否可以接受跨域请求。由于您的操作仅响应POST请求,因此它不会响应该请求,浏览器将阻止它。

我写了一篇关于在WCF中实现CORS支持的方法的帖子,你可以在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx找到它。基本上,除了“正常”请求之外,您还需要处理OPTIONS请求。