远程执行代码 - Lambdas ...静态方法....等。用于C#的eval()?

时间:2010-01-15 19:01:21

标签: c# rpc

所以这就是概念。我正在尝试为CouchDB编写一个C#后端(继续阅读,这与CouchDB几乎没有任何关系)。

这是基本想法:

1)DB Driver将任意字符串上传到DB Server。

2)DB Driver告诉DB服务器运行代码并生成视图

3)数据库服务器加载我的C#后端,将其输入输入字符串

4)数据库服务器将该功能交给C#后端

5)DB Server递交C#后端数据以执行

上的功能

6)C#Backend执行代码并将数据导入数据库服务器

7)数据库服务器存储或以其他方式对结果进行排序并将结果发送回数据库驱动程序

所以我遇到的问题是远程代码执行。我的所有模型都是C#对象。因此,能够在前端编写代码并将代码转移到后端执行是非常好的。无需复制DLL等。现在,在CouchDB中,这种查询语言是JavaScript,因此将代码复制到字符串中非常简单。

C#中有这样的选项吗?我可以获得函数的字符串版本吗?我应该创建一个托管这些DLL程序集的外部服务器,并将它们提供给CouchDB后端吗?我应该在前端编译它们,并将.cs文件作为资源嵌入吗?我只是在这一点集思广益。欢迎任何想法/想法/问题。

4 个答案:

答案 0 :(得分:0)

听起来你正在寻找的是C#的Javascript样式eval方法。不幸的是,这在今天并不存在,并且实施起来并不容易。动态执行C#代码的两种主要方法是

  1. 通过Reflection.Emit
  2. 构建轻量级方法
  3. 动态编译程序集(通过CodeDom或直接调用csc)。
  4. 这里要考虑的另一个选择是利用动态语言。从C#4.0开始,可以很容易地与动态语言互操作。而不是后端传递C#代码,为什么不通过Python或Ruby并利用DLR?

答案 1 :(得分:0)

定义“功能”。这是任意代码(必须动态编译和执行),还是可以附加到类的方法列表?

如果后者(你应该做什么 - 允许任意动态代码执行不仅违反.NET开发模型(在我看来 - 请不要火焰),这是一个巨大的安全风险),您可以使用Web服务。

Web服务和WCF服务是在计算机之间分发处理的绝佳方式。

答案 2 :(得分:0)

我过去曾使用过几个项目可能会帮助你:

Vici Parser

  

Vici Parser是一个.NET库   后期表达式解析和   模板渲染。它还包括   一个易于使用的标记器,可以   用于解析各种文件   格式(功能齐全的JSON解析器   包括在内。)

This Codeproject article

  

此示例显示“Eval”功能   对于C#并实现不同的用法   这个评估函数。图书馆   是用C#编写的,可以测试   使用解决方案中的MainForm。

其他替代方案包括使用XSLT脚本(某些Umbraco CMS makes use of)以及类似LUA.NET之类的内容,这些内容可以让您对代码可以执行的内容进行沙盒化。

答案 3 :(得分:0)

您是否可以使用表达式树(System.Linq.Expressions)实现此目的?

也许是将序列化表达式树传递到后端的一些方法,将其编译为lambda / Func<>在服务器端然后执行它?

除了Linq揭幕时的一些好奇心研究之外,没有玩过它们,但它可能有所帮助。