在远程机器上运行代码

3
在Java中,使用RMI API,您可以将任意代码发送到远程机器执行。我知道在.NET中使用Remoting或WCF可以实现类似但不完全相同的功能。
但根据我的经验,两者都不允许任意代码执行,远程机器仍然需要引用对象,而不仅仅是接口。这正确吗?
我通过在共享位置中提供可访问的DLL来解决了这个问题,并更新了该DLL,以便远程机器能够使用它来执行代码。有更好的方法吗?
编辑: http://www.cs.ucsb.edu/~cappello/lectures/rmi/helloworld.shtml 在链接中,方法调用仅返回一个字符串。但这可以是任何内容,客户端不需要先了解方法的实现。

你在问什么?“任意代码执行”是什么意思?我不认为RMI会将字节码发送到远程计算机以执行。即使它这样做,那也是一个巨大的安全漏洞。 - Panagiotis Kanavos
我已经更新了问题,解释了我所说的任意代码。我同意这可能会带来安全问题,但如果正确实现,它也可以成为一个有用的功能。 - redspidermkv
1个回答

2

都不允许任意代码执行

没错,您必须公开要远程执行的代码。

...远程机器仍然需要引用对象,而不仅仅是接口。这正确吗?

在 WCF 客户端中,您可以 添加对服务的引用,并创建服务使用的类的本地副本。

请注意 Remoting 是:

不建议进行新开发。

但是,您可以通过从客户端和服务器项目中添加对共享 dll 的引用来避免共享位置 dll,并因此将相同的 dll 部署到两个位置。

或者 从另一个项目添加类源文件的链接

运行从字符串编译的任意代码

您可以在运行时编译和运行任意代码,并将其与一个简单的 WFC 方法相结合,该方法接受一个字符串,编译并运行它,这样就可以实现您想要的功能:


CodeDOM 对此特别有趣,感谢提供链接! - redspidermkv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接