gpt4 book ai didi

.net - 动态远程查询(例如可序列化的 LINQ)

转载 作者:行者123 更新时间:2023-12-01 02:54:25 25 4
gpt4 key购买 nike

我正在为以下情况寻找可能的解决方案:

  • 我有一个服务,它在内存中保存大量数据,并且以非常高的频率更新数据
  • 我想让客户可以通过 Internet 查询该数据

  • 理想情况下,我希望客户端在客户端针对代理对象模型编写一个 LINQ 查询,序列化表达式树,通过网络发送序列化查询,确保客户端只执行“读取”操作,然后返回一个动态结果集。

    不幸的是,序列化/反序列化表达式树并确保只读操作(禁止恶意查询)似乎并不容易。

    一个想法是使用 LINQ to SQL 提供程序来序列化查询,然后在服务器端使用 Entity SQL 来反序列化查询并在我的对象模型中运行它。

    无论如何,我想知道在构建这项服务时我还有哪些其他优雅的选择。

    谢谢,

    汤姆

    最佳答案

    您可以考虑实现 OData客户端访问的端点。服务器和客户端库已经存在以提供以下功能:

  • 能够设置对数据的只读访问权限
  • 客户端可通过 LINQ 查询的数据

  • 现在,我不确定这个解决方案是否能巧妙地提供对表达式树的序列化/反序列化;由于您正在处理内存中的对象,因此您可能需要做一些手动工作才能实现这一点。

    我见过的大多数使用 OData 的例子都是使用数据库作为后端。但是,您可以为您的内存数据构建一个自定义 OData 提供程序,然后仍然利用该协议(protocol)的通用协议(protocol)和丰富的客户端库支持。如果序列化/反序列化的全部目的是能够通过 HTTP 传输数据,OData 已经为您解决了这个问题。

    有关 OData 端点的快速示例,请访问 Stack Overflow's implementation of OData .他们已经实现了一个解决方案,允许您编写一个直接的 SQL 查询来从 StackOverflow 获取数据。虽然我无法找到他们针对 OData 服务用于测试查询的确切查询字符串,但我确实注意到,当我通过 Fiddler 检查响应时,结果以 JSON 序列化返回。这是一个很好的例子,可以看到 OData 的强大功能。

    关于.net - 动态远程查询(例如可序列化的 LINQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551258/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com