表达式跨服务器执行技术研究情况

要在业务层编写一个 Linq查询(或者说表达式树)对象,然后序列化,以HTTP Get的方式发送到 WebAPI 的服务器上执行,因此需要将 Linq 对象进行序列化和反序列化,昨天的实验结果是如果直接对Linq 对象进行序列化,反序列化会遇到问题,因此今天尝试其它的数据传输方式,方案有2种:

1,以特定的查询DTO 方式传输查询请求 这涉及到2个步骤:

1.1,将 Linq 对象序列化到DTO对象的问题,这个必须定制,解析Linq表达式,构造DTO对象;

1.2,将DTO对象在解析成Linq 对象。

这2个步骤都没有现成的解决方案,难度很大。

 

2,以业界开放的数据查询协议 OData 方式传输查询请求

OData是业界新兴起的一个标准,在Asp.Net WebAPI和 WCF DataService中均可以提供支持,该方案也分为2个步骤:

2.1,将Linq对象序列化成OData请求的URL;

2.2,将OData URL请求提交至 WebAPI OData;

经过试验,在 ASP.NET MVC5 WebAPI OData 提供了支持,2.2 可以实现,但是2.1步骤难以实现,和其他朋友交流后得知,有一个linqtoquerystring 的项目可能提供支持(http://linqtoquerystring.net/): Linq to Querystring is an expression parser for .NET that aims to provide a lightweight subset of the OData URI Specification. We focus only on the query aspect of the specification which is one of the most useful and flexible elements of OData.

下载了该项目源码进行研究,目前还没有研究明白具体如何使用,以及它支持的OData版本(目前最新的是OData V4)

有关OData的应用文章:

http://www.it165.net/pro/html/201306/6106.html 让Web API支持OData查询

http://www.tuicool.com/articles/BjMF32  ASP.NET WebApi 开放数据

-------------------------------------

总结: 目前这种跨服务器的Linq查询有一定难度,建议根据应用需求使用常规的方法来解决,在WebAPI服务器上提供方法进行定制查询,或者在整个查询层,使用其它数据框架.

 

 

posted on   深蓝医生  阅读(267)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2011-05-30 PostgreSQL的PDF.NET驱动程序构建过程

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示