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

标签 .net service

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

  • 我有一个服务,它在内存中保存大量数据,并且以非常高的频率更新数据
  • 我想让客户可以通过 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/

    相关文章:

    .net - .Net 中的单例模式是不可能的吗?

    c# - javascript 在 mozilla 中不起作用,但在其他浏览器中起作用

    java - 为什么在Spring中使用服务实现模式

    android - 后台服务在 Android Marshmallow 6.0+ 设备上停止

    java - 在android中,有没有办法获取每条短信发送短信的应用程序的名称

    .net - 来自核心 .NET 代码的 ObjectDisposedException

    c# - 升级到 .NET 4.0 并获取无法加载文件或程序集对已删除的旧版本 DLL 的引用

    .net - 如何在.NET中使用ColorMatrix改变亮度、颜色、饱和度、色调

    service - 当面向消息的中间件完成这项工作时,为什么还要为服务发现而烦恼?

    angularjs - typescript :$rootScope 上不存在属性(Angularjs)