我正在尝试让一个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与数据服务工作?
发布于 2013-11-07 17:48:09
如果使用IIS,请验证ExtensionLess处理程序是否配置为处理OPTIONS请求。
一些与您的直接问题无关的注意事项:由于CORS是不适当支持,您找到的包和任何其他解决方案都不会真正令人满意(您将无法轻松地指定您的策略)。使用WCF检查器创建一个由专业人员维护的包是可能的,但我还没有看到。相反,如果你同意的话,我想邀请你来投票表决。
同时,我只能建议您非常小心地集成在web上找到的任何代码(因为大多数代码几乎没有经过测试)。这篇文章可能会在这方面帮助你。这与数据服务没有直接关系,但它是相同的WCF技术。也许可以从Web实现或其他项目获得灵感。
祝好运。
PS:在90%的情况下,您还需要忘记涉及代理的解决方案。在大多数架构中,它是可怕的,没有什么意义,除非您的边缘后端设计的方式会使它看起来不那么疯狂。
更新:还验证您使用的实现实际上正确地处理OPTIONS请求。如果通过它们,WCF数据服务将返回501,拦截器可能也会将其传回,即使头部设置正确。由于飞行前请求不需要身体,一个快速和肮脏的黑客将收集这些501,并将其转换为200,但很明显,你真的想阻止请求击中数据服务的第一位。
https://stackoverflow.com/questions/19808069
复制相似问题