尝试将WCF数据服务用作另一个OData服务的中继

时间:2014-02-05 19:38:53

标签: asp.net-web-api odata wcf-data-services

我有一个ASP.NET Web API 2.0 OData服务项目,我试图通过ASP.NET MVC项目通过服务引用+ WCF数据服务(5.6)进行中继 - 我这样做的原因是用户浏览器'可以访问服务而无需担心IE8和IE9的CORS-所以他们将拥有相同的主机。

经过一些修修补补后,这个设置大部分都有效但是有一些问题,我的设置:

服务项目

1)ASP.NET Web API 2.0 OData端点

2)使用WCF数据服务实体框架提供程序(1.0.0-alpha-2)的WCF数据服务5.6 OData端点+实体框架6.0.2(EntityFrameworkDataService< DBContext>)

当我直接访问这两种服务时,无论我通过服务引用,LINQPad还是原始URL,我们都可以完美地执行这些服务。然后我设置了ASP.NET MVC项目:

ASP.NET MVC项目(转发上述服务引用):WCF数据服务5.6,(DataService< ServiceReference-1-or-2>)

当我尝试在充当中继的WCF服务上执行相同的查询时出现问题:

使用$ inlinecount = allpages转发(1)给我:“处理此请求时出错。”

用$ select = ...转发(1)和(2)都给了我:“未实现”。

当我通过反射提供程序中继虚拟POCO上下文时,所有操作都可以在中继WCF数据服务上完美运行,这使我怀疑问题出在WCF数据服务和服务引用的组合中,因为它们两者都可以独立工作......也许WCF数据服务正在检查LINQ Provider以获取服务参考并随意决定它不支持这些操作? 我可以没有$ select但没有$ inlinecount是一个交易破坏者。我可以采取几种替代解决方案,但我真的希望这种方法有效:任何想法?

1 个答案:

答案 0 :(得分:0)

这与:WCF Data Service - Proxy mid-tier service

非常相似

简而言之:你可以通过

进行接力

1)使服务相信它与不同的URL(因此除了通过代理之外,所有访问都有效地中断)。

2)通过编写另一个手动中继到服务引用的服务...

我没有选择上述任何一项,并将我的服务重组为Web API Owin中间件。我失去了单独服务部署的能力,但可以轻松交换另一部分middlware,这使得CORS问题不存在。