C# WCF数据服务(OData)和CORS

C# WCF数据服务(OData)和CORS,c#,wcf,odata,cors,dataservice,C#,Wcf,Odata,Cors,Dataservice,我正在尝试使用WCF数据服务处理跨域请求。 我在如何使WCF服务与CORS一起工作时发现了以下内容: 我下载了示例,但无法使其与数据服务一起工作。它适用于示例服务,但不适用于我的数据服务 这是我非常简单的WCF数据服务: public class TestService : DataService<DataContext> { public static void InitializeService(DataServiceConfiguration config)

我正在尝试使用WCF数据服务处理跨域请求。 我在如何使WCF服务与CORS一起工作时发现了以下内容:

我下载了示例,但无法使其与数据服务一起工作。它适用于示例服务,但不适用于我的数据服务

这是我非常简单的WCF数据服务:

public class TestService : DataService<DataContext>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.UseVerboseErrors = true;
        config.SetEntitySetAccessRule("Items", EntitySetRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
    }
} 
公共类TestService:DataService
{
公共静态void InitializeService(DataServiceConfiguration配置)
{
config.UseVerboseErrors=true;
config.SetEntitySetAccessRule(“Items”,EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion=DataServiceProtocolVersion.V3;
}
} 
TestService.svc文件:

<%@ ServiceHost Language="C#" Factory="WebHttpCors.CorsWebServiceHostFactory, WebHttpCors" Service="MvcApplication1.TestService" %>

DataContext也非常简单:

public class DataContext : DbContext
{
    public DbSet<Item> Items { get; set; }
}
公共类DataContext:DbContext
{
公共数据库集项{get;set;}
}
但是,飞行前选项请求返回501。
要让CORS使用数据服务,我缺少什么吗?

如果您使用的是IIS,请验证
无扩展处理程序是否配置为处理
选项
请求

与您的直接问题无关的几点注意事项:由于CORS是,您发现的包既不是真正令人满意的包,也不是真正令人满意的包(您将无法轻松指定您的策略)。可以使用WCF检查器创建一个专业维护的包来完成这项工作,但我没有看到任何。相反,如果你同意,我想邀请你参加

同时,我只能建议您非常小心地集成在web上找到的任何代码(因为大部分代码几乎没有经过测试)。我可以帮你。这与数据服务没有直接关系,但它是同一种WCF技术。也许可以看看Web API实现或从中获得灵感

祝你好运

附言:在90%的情况下,你也会想忘记涉及的解决方案。在大多数体系结构中,这非常可怕,而且没有什么意义,除非您的edge后端的设计方式使它看起来不那么笨拙


更新:还要验证您正在使用的实现是否正确处理
选项
请求。如果将它们传递出去,WCF数据服务将返回一个501,即使头设置正确,拦截器也可能将其传递回去。由于飞行前的请求不需要正文,一个快速而肮脏的黑客会将这些501改为200,但显然你真的想在一开始就阻止请求访问数据服务。

非常感谢,这真的帮助了我,特别是更新的部分,这就是501的来源,我确实可以把它设为200。我同意你的看法,这是快速和肮脏的,我会检查我们是否可以转移到一个Web API来有一个正确的实现。我的odata服务也有同样的问题,无法找到解决这个问题的方法@Malyngo你有什么解决方案吗,我所做的是使用以下代码:然后在BeforeSendReply方法中将CorsMessageInspector中的ResponseCode更改为200。但正如tne所说,这是一个快速而肮脏的黑客行为。与此同时,我已经将数据服务移植到WebAPI。我只能向任何需要CORs支持其ODATA服务的人推荐。易于实施,效果非常好: