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

Posted

技术标签:

【中文标题】您可以将 WCF 数据服务(ne OData、ne Astoria、ne ADO.NET 数据服务)与 NetTcpBinding 一起使用吗?【英文标题】:Can you use WCF Data Services (ne OData, ne Astoria, ne ADO.NET Data Service) with NetTcpBinding? 【发布时间】:2011-04-08 00:47:35 【问题描述】:

我正在考虑通过慢速卫星连接创建数据查询 WCF 服务,我非常喜欢 WCF 数据服务。我看到的问题是 HTTP 是一种非常冗长的格式,由于我所做的一切都是内部和 .NET,是否可以使用 NetTcpBinding 来减少一些开销?

这甚至可能吗?可取吗?

【问题讨论】:

【参考方案1】:

在我自己研究这个问题时,我遇到了MSDN article on Self-Hosted WCF Data Services。本文指出,您可以使用DataServiceHost 托管服务,该服务仍需要 HTTP(它源自 WebServiceHost)。

但您也可以使用IDataServiceHost 滚动您自己的主机。以下是 MSDN 文章的摘录:

对于 WCF 主机的情况 实施太严格了,你 也可以为一个自定义主机 数据服务。任何类 实现 IDataServiceHost 接口 可以用作网络主机 数据服务。自定义主机必须 实现 IDataServiceHost 接口,并能够处理 履行基本职责 数据服务主机:

为数据服务提供服务根路径。 将请求和响应标头信息处理到适当的 IDataServiceHost 成员实现。 处理数据服务引发的异常。 验证查询字符串中的参数。

这篇文章似乎表明 MS 已将数据服务职责与网络接口职责适当分离。如果是这样,那么我应该能够编写一个 NetTcpDataServiceHost。有没有人写过 IDataServerHost?有什么建议吗?

【讨论】:

IDataServiceHost 仍然需要 HTTP,不是吗? 我很好奇 Simon - 您是否想出了一个好的解决方案来在 WCF/TCP 设置中提供 WCF 数据服务的可自定义查询功能? 不是很好。我实现了我的服务所需的 OData URI 架构的一个子集,并通过 net.tcp 完成了它,但它并不是真正的 OData 服务。您可以尝试查看 CodePlex 上的 ODataLib ...这是 Microsoft 的 OData 服务核心的开源实现。在某个时候,我希望看看这个,看看能收集到什么,但项目进度进展得很快。你知道它是怎么回事。【参考方案2】:

不,WCF 数据服务是建立在 REST 之上的,而 REST 本身非常紧密和完全基于 HTTP 动词,如 GET、PUT、POST 等 - 你不能通过 NetTcp 运行它们,因为它们本质上是绑定到HTTP 协议栈。

也许您还有其他选择可以减少正在传输的数据?调整你的对象 - 如果可以的话,修剪脂肪 - 同时检索一次检索的行数,以及传输的属性/数据字段的数量。这可能是您最有希望的方法。

【讨论】:

虽然在技术上可以创建自定义主机,但 OData 与 HTTP 的绑定过于紧密,无法实现。太糟糕了...拥有具有持久连接的 OData 服务会很好。

以上是关于您可以将 WCF 数据服务(ne OData、ne Astoria、ne ADO.NET 数据服务)与 NetTcpBinding 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

带有 WCF REST 的 OData

WCF 数据服务 (OData) 和 CORS

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

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

WCF Restful 服务和 WCF 数据服务 [关闭]

是否有用于 OData 协议 Uri 的 .NET 类包装器