WCF DataService(OData)和CORS
我正在尝试使用跨域请求的WCF DataService。 我发现这有关如何使用CORS的WCF服务: http : //blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and -wcf.aspx
我下载了示例,但无法使用DataService。 它适用于示例服务,但不适用于我的DataService。
这是我非常简单的WCF DataService:
public class TestService : DataService { public static void InitializeService(DataServiceConfiguration config) { config.UseVerboseErrors = true; config.SetEntitySetAccessRule("Items", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; } }
TestService.svc文件:
DataContext也很简单:
public class DataContext : DbContext { public DbSet Items { get; set; } }
但是,预检选项请求返回的是501.我是否缺少让CORS与Dataservice一起工作?
如果您使用的是IIS,请validationExtensionLess
处理程序是否已配置为处理OPTIONS
请求。
与您的直接问题无关的一些注意事项:由于CORS 未得到适当支持 ,因此您找到的软件包或任何其他解决方案都不会真正令人满意(您将无法轻松指定您的策略)。 使用WCF检查员可以创建一个专业维护的包,但我还没有看到任何包。 相反,如果您同意,我想邀请您投票 。
与此同时,我只能建议您非常仔细地集成您在网络上找到的任何代码(因为大部分代码都没有经过测试)。 本文可能会对您有所帮助。 这与数据服务没有直接关系,但它与WCF技术相同。 也许可以看一下Web API实现或其他项目的灵感。
祝好运。
PS:在90%的情况下,您还想忘记涉及代理的解决方案。 在大多数架构中,它只是可怕而且没什么意义,除非你的边缘后端的设计方式不会让它显得不那么笨拙。
更新:还要validation您正在使用的实现是否正确处理了OPTIONS
请求。 如果它通过它们,WCF数据服务将返回501,即使标题设置正确,拦截器也可能只是将其传回。 由于预检请求不需要正文,快速而肮脏的黑客就是拾取这些501并将其更改为200秒,但显然你真的想要阻止请求首先点击数据服务。