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

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

这甚至可能吗?可取吗?

【问题讨论】:

    标签: wcf wcf-data-services odata 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 服务会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2011-03-06
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多