【问题标题】:WCF DataService (OData) and CORSWCF 数据服务 (OData) 和 CORS
【发布时间】:2013-11-17 10:52:40
【问题描述】:

我正在尝试让 WCF DataService 处理跨域请求。 我发现了如何让 WCF 服务与 CORS 一起使用: http://blogs.microsoft.co.il/blogs/idof/archive/2011/07/02/cross-origin-resource-sharing-cors-and-wcf.aspx

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

这是我非常简单的 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.svc 文件:

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

DataContext 也很简单:

public class DataContext : DbContext
{
    public DbSet<Item> Items { get; set; }
}

但是,预检选项请求仍然返回 501。 为了让 CORS 与数据服务一起工作,我有什么遗漏吗?

【问题讨论】:

    标签: c# wcf odata cors dataservice


    【解决方案1】:

    如果您使用的是 IIS,请确认 ExtensionLess 处理程序已配置为处理 OPTIONS 请求。

    与您的直接问题无关的一些注意事项:由于 CORS 是 not properly supported,因此您找到的包和 any other solutions 都不会真正令人满意(您将无法轻松指定您的政策)。可以使用 WCF 检查器创建一个专业维护的包来执行此操作,但我还没有看到。相反,如果你同意,我想邀请你加入vote this up

    与此同时,我只能建议您非常仔细地集成您在网络上找到的任何代码(因为大部分代码几乎没有经过测试)。 This article 可以帮助您。这与数据服务没有直接关系,但它是相同的 WCF 技术。也许看看 Web API 实现或other projects 以获得灵感。

    祝你好运。

    PS:在 90% 的情况下,您还想忘记涉及 proxying 的解决方案。在大多数架构中,这太可怕了,而且毫无意义,除非你的边缘后端的设计方式让它看起来不那么笨拙。

    更新:还要验证您使用的实现是否确实正确处理了OPTIONS 请求。如果它通过它们,WCF 数据服务将返回 501,并且即使标头设置正确,拦截器也可能只是将其通过。由于 preflight 请求不需要正文,因此快速而肮脏的 hack 将获取这些 501 并将它们更改为 200,但显然您确实希望首先阻止请求访问数据服务。

    【讨论】:

    • 非常感谢,这对我很有帮助,尤其是更新的部分,这是501的来源,我确实可以将它设置为200。我同意你的看法,这既快又脏,我会检查我们是否可以转移到 Web API 以进行正确的实现。
    • 我的 odata 服务也遇到了同样的问题,找不到解决这个问题的方法@Malyngo,你有解决方案吗??
    • Royaan,我所做的是使用此代码:skydrive.live.com/…,然后在 BeforeSendReply 方法中将 CorsMessageInspector 中的 ResponseCode 更改为 200。但正如 tne 所说,这是一个快速而肮脏的 hack。
    • 同时,我已将 DataService 移植到 WebAPI。我只能向需要 COR 支持其 ODATA 服务的任何人推荐它。易于实施,效果很好:msdn.microsoft.com/en-us/magazine/dn532203.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多