将 WCF 服务中的数据公开为 oData

Posted

技术标签:

【中文标题】将 WCF 服务中的数据公开为 oData【英文标题】:Exposing data from WCF services as oData 【发布时间】:2011-10-16 02:19:34 【问题描述】:

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

如果有人能更深入地了解 oData,那就太好了。我已经对此主题进行了一些谷歌搜索,但每当我搜索“wcf odata”时,我都会获得有关 WCF 数据服务的信息。

任何帮助/链接将不胜感激。

【问题讨论】:

【参考方案1】:

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

您可能需要详细说明为什么您觉得需要或强烈要求使用 OData 但不使用 WCF 数据服务。该设置有什么问题/问题? 为什么您只想使用“普通”WCF 服务??

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

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

因此,虽然绝对有可能让面向过程的 WCF 服务同时公开 SOAP 和 REST 端点,但我真的不明白如何混合和匹配“公开此资源”类型的方法带有 SOAP 绑定的 WCF 数据服务/OData - 我相信这不起作用。

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

【讨论】:

实际上,我们正在寻求开发以不同格式公开数据的服务,所以我只是在想,如果我们可以将所有内容合二为一。不是我想用普通的 wcf 服务,只要符合要求。 数据应该通过 oData 公开,并且应该是 restful。客户也可能需要 SOAP。如果有任何信息可以用 wcf 清除我对 oData 的概念,用它可以做什么,那将是非常棒的。 这就是我的想法,在阅读了有关内容之后,拥有两种不同的服务。我还是想确认一下。谢谢! @marc_s 感谢您对 odata 和 WCF 进行了相当不错的简要介绍。您能否将我引导到一个信息更丰富的链接,该链接详细讨论了集成 odata 和 WCF REST 的内容? @JeganKunniya:我会以MSDN WCF REST developer center 为起点【参考方案2】:

Microsoft 有一个名为WCF WebApi (NuGet Package) 的新(ish)项目,它简化了 RESTful WCF。它确实需要关注REST 的“表示”部分,因此您可以基于内容协商(或可选的任何您想要的约定)以多种表示形式(JSON、XML、oData、PNG 等)公开您的数据。相同的服务合同操作。目前融入框架的是支持oData GET queries的能力,只需返回一个集合.AsQueryable()

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

* 更新 * 该项目已纳入 ASP.NET(通常与 ASP.NET MVC 结合使用),不再属于 WCF 团队。新产品名为ASP.NET WebAPI。

【讨论】:

以上是关于将 WCF 服务中的数据公开为 oData的主要内容,如果未能解决你的问题,请参考以下文章

如何将完整的数据库架构公开为 OData 服务

与 OData 控制器等效的 Odata WCF 服务功能

您可以将 WCF 数据服务(ne OData、ne Astoria、ne ADO.NET 数据服务)与 NetTcpBinding 一起使用吗?

WCF 数据服务 (OData) 和 CORS

WCF 数据服务中的集合存在条件

Odata 压缩 - 有任何支持吗? (用于 WinRT 的 WCF 数据服务 5.0)