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秒,但显然你真的想要阻止请求首先点击数据服务。