将数据从WCF服务公开为oData

时间:2011-07-29 16:06:29

标签: wcf wcf-data-services odata

是否可以将oData与WCF服务应用程序一起使用但不能使用WCF数据服务?

如果有人能够更多地了解oData,那将会很棒。我在这个主题上做了一些谷歌搜索,但每当我搜索“wcf odata”时,我都会获得有关WCF数据服务的信息。

任何帮助/链接都将受到赞赏。

2 个答案:

答案 0 :(得分:12)

WCF数据服务是一般OData协议的Microsoft实现。因此,只有WCF数据服务支持/实施OData - “正常”WCF服务(并且)。

您可能需要详细说明为什么您认为需要或强烈要求使用OData但不要使用WCF数据服务。你对这个设置有什么问题? 为什么您是否只想使用“普通”WCF服务?

更新:确定,所以您希望拥有以不同方式和不同方法公开数据的服务。您可以做的是创建一个常规WCF服务,该服务公开SOAP端点以及webHttpBinding REST端点。这将工作 - 但它是一个“常规”WCF服务,其方法采用参数并返回一些数据结构。这是 WCF数据服务(OData)。

OData更像是“这里是我的数据集合,你可以在其中浏览”这种方法 - 它更多的是使用REST向整个数据模型暴露给外部世界。这不会与SOAP混合和匹配 - 这是一个更加面向过程的,例如, LoadCustomerSaveInvoice等等。

因此,尽管面向过程的WCF服务同时暴露SOAP和REST端点是绝对可能的,但我真的不知道如何混合和匹配“expose-this-resource”类型的方法带有SOAP绑定的WCF数据服务/ OData - 我认为这不起作用。

因此,如果必须公开WCF数据服务(OData)的数据模型,则需要为SOAP客户端创建第二个非常不同的常规WCF服务,这些服务可能最终基于相同的数据(例如,访问相同的数据库),但它的“面孔”看起来会完全不同。

答案 1 :(得分:6)

微软有一个名为WCF WebApiNuGet Package)的新(ish)项目,它简化了RESTful WCF。它真的需要考虑REST的“表示”部分,以便您可以基于内容协商(或者根据您想要的任何约定)以多种表示形式(JSON,XML,oData,PNG等)公开您的数据。所有来自同一服务合同的操作。目前已融入框架的是通过简单地返回集合.AsQueryable()来支持oData GET queries的能力。

虽然这不是纯粹的WCF / oData解决方案,但正如您所说的那样,我想我会提及该项目,以防它符合您的具体要求。目前的Go-Live许可证可能会令人望而却步,因为此代码的“预览”状态可能会如此;但如果没有,这可能是你的解决方案。

* UPDATE * 这个项目已经进入ASP.NET(通常与ASP.NET MVC一起使用),不再属于WCF团队。新产品名为ASP.NET WebAPI