我正在编写将由客户在野外使用的 WCF 服务,因此他们需要处理跨域请求。我无法让我的开发服务器接受此类请求。这是场景:
- 我在 Visual Studio 2012 的实例中运行 WCF 项目,使用 IIS Express 8 作为特定端口上的服务器。
- 我在 Visual Studio 2012 的另一个实例中运行客户端项目,也使用 IIS Express 8 作为服务器。本项目使用 AJAX 来消费其他项目中的服务。
当我在 IE 中运行客户端项目时没有问题,因为 IE 不发送预检选项请求。当我在 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?
谢谢!