您可以将 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 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章