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

.net 动态远程查询(例如,可序列化LINQ),.net,service,.net,Service,我正在为以下场景寻找可能的解决方案: 我有一个在内存中保存大量数据的服务,并且以非常高的频率更新数据 我想让客户可以通过互联网进行数据查询 理想情况下,我希望客户端根据代理对象模型在客户端编写LINQ查询,序列化表达式树,通过线路发送序列化查询,确保客户端只执行“读取”操作,然后返回动态结果集 不幸的是,序列化/反序列化表达式树并确保只读操作(禁止恶意查询)似乎并不容易 一个想法是使用LINQtoSQL提供程序来序列化查询,然后在服务器端使用实体SQL来反序列化查询并在我的对象模型上运行它

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

  • 我有一个在内存中保存大量数据的服务,并且以非常高的频率更新数据
  • 我想让客户可以通过互联网进行数据查询
理想情况下,我希望客户端根据代理对象模型在客户端编写LINQ查询,序列化表达式树,通过线路发送序列化查询,确保客户端只执行“读取”操作,然后返回动态结果集

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

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

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

谢谢


汤姆

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

  • 能够设置对数据的只读访问
  • 客户端可通过LINQ查询数据
现在,我不确定这个解决方案是否能够灵活地提供表达式树的序列化/反序列化;由于您处理的是内存中的对象,因此可能需要进行一些手动操作才能实现这一点

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

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

你可以看看,用于构建服务。

我最近在一个项目中使用了OData,到目前为止,它是一流的