【发布时间】:2011-10-16 02:19:34
【问题描述】:
是否可以将 oData 与 WCF 服务应用程序一起使用但不使用 WCF 数据服务?
如果有人能更深入地了解 oData,那就太好了。我已经对此主题进行了一些谷歌搜索,但每当我搜索“wcf odata”时,我都会获得有关 WCF 数据服务的信息。
任何帮助/链接将不胜感激。
【问题讨论】:
标签: wcf wcf-data-services odata
是否可以将 oData 与 WCF 服务应用程序一起使用但不使用 WCF 数据服务?
如果有人能更深入地了解 oData,那就太好了。我已经对此主题进行了一些谷歌搜索,但每当我搜索“wcf odata”时,我都会获得有关 WCF 数据服务的信息。
任何帮助/链接将不胜感激。
【问题讨论】:
标签: wcf wcf-data-services odata
WCF 数据服务 是通用 OData 协议的 Microsoft 实现。因此,只有 WCF 数据服务是/支持/实现 OData - “正常” WCF 服务不(并且可以不)。
您可能需要详细说明为什么您觉得需要或强烈要求使用 OData 但不使用 WCF 数据服务。该设置有什么问题/问题? 为什么您只想使用“普通”WCF 服务??
更新: 好的,所以您希望拥有以不同方式和不同方法公开数据的服务。您可以做的是创建一个常规的 WCF 服务,该服务同时公开 SOAP 端点和 webHttpBinding REST 端点。这将起作用 - 但它是一个“常规”WCF 服务,其方法接受参数并返回一些数据结构。这不是 WCF 数据服务 (OData)。
OData 更像是一种“这是我的数据集合,您可以在其中浏览”的方法 - 它更多的是使用 REST 向外部世界公开整个数据模型。这不会与 SOAP 混合和匹配——后者更面向过程,例如LoadCustomer、SaveInvoice 等等。
因此,虽然绝对有可能让面向过程的 WCF 服务同时公开 SOAP 和 REST 端点,但我真的不明白如何混合和匹配“公开此资源”类型的方法带有 SOAP 绑定的 WCF 数据服务/OData - 我相信这不起作用。
因此,如果您必须公开 WCF 数据服务 (OData) 的数据模型,您将需要为 SOAP 客户端创建第二个外观完全不同的常规 WCF 服务,最终可能基于相同的数据 (例如访问同一个数据库),但它的“脸”看起来会完全不同。
【讨论】:
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。
【讨论】: