我正在编写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中的Handler Mappings列表的顶部来解决它。
我应该指出,我正在使用我能想到的最慷慨的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的任何帮助?
谢谢!
OptionsVerbHandler
并自己处理。或者,你可能想要暴露JSONP
。我建议你使用ASP.Net Web-API
。 - Aron