跨域调用 WCF 时出现问题

Issue with calling WCF cross domain

本文关键字:问题 WCF 调用      更新时间:2023-09-26

我正在尝试通过http使用javascript跨域调用WCF服务。

我已经将访问控制允许源标头添加到了我想调用的操作中,如下所示:

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)

我做错了什么根本吗?

您正在做的事情对于 GET 请求(在启用 CORS 的浏览器中)很好 - 请求被发送到服务,如果服务具有访问控制允许源标头,浏览器将允许它返回到应用程序)。

对于"不安全"的请求(即那些可能在服务中引起副作用的请求,例如 POST、PUT 和 DELETE),浏览器首先发送预请求,即"询问"服务是否可以接受跨域请求的选项请求。由于您的操作仅响应 POST 请求,因此它不会响应该请求,浏览器将阻止它。

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