【发布时间】:2013-10-19 20:09:15
【问题描述】:
我正在编写 WCF 服务,这些服务将被野外的客户端使用,因此他们需要处理跨域请求。我无法让我的开发服务器接受此类请求。这是场景:
- 我在 Visual Studio 2012 实例中运行 WCF 项目,使用 IIS Express 8 作为特定端口上的服务器。
- 我正在另一个 Visual Studio 2012 实例中运行客户端项目,也使用 IIS Express 8 作为服务器。此项目使用 AJAX 来使用其他项目中的服务。
当我在 IE 中运行客户端项目时没有问题,因为 IE 不发送预检 OPTIONS 请求。当我在 Chrome 中运行它时,预检 OPTIONS 请求返回 405 Method Not Allowed 并且 Chrome 放弃了该服务。以前版本的 Chrome 会忽略该错误并继续执行实际的 POST 请求(或 Get,等等),但以后的版本似乎更挑剔。
我在部署的 WCF 项目中也遇到了这个问题,并通过将 OPTIONSVerbHandler 移动到 IIS 中的处理程序映射列表的顶部来解决它。
我应该指出,我正在使用我能想到的最慷慨的 web.config 设置来尝试允许 CORS。例如,我在 WCF 项目的配置中有这个:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="X-Powered-By" value="*" />
</customHeaders>
</httpProtocol>
无论如何,从代码运行的 WCF 项目的任何客户端跨域请求都会失败并出现 405 错误。
对设置 WCF 项目本身或 IIS Express 8 以启用 CORS 有帮助吗?
谢谢!
【问题讨论】:
-
您是否将 WCF 服务用于 REST?您实际上可能想要删除
OptionsVerbHandler并自己处理。或者...您可能想公开JSONP。我建议你使用ASP.Net Web-API。 -
多年后,现在可以在 IIS Express 上使用 CORS 模块 blog.lextudio.com/…
标签: wcf visual-studio-2012 cross-domain cors iis-express