我正在尝试让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 DataService:
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与Dataservice一起工作的东西?
答案 0 :(得分:3)
如果您使用的是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,即使标题设置正确,拦截器也可能只是将其传回。由于预检请求不需要正文,快速而肮脏的黑客就是拾取这些501并将其更改为200秒,但显然你真的想要阻止请求首先点击数据服务。