如何在另一个进程中访问 .Net 对象?
Posted
技术标签:
【中文标题】如何在另一个进程中访问 .Net 对象?【英文标题】:How do I access .Net objects in another process? 【发布时间】:2011-09-09 21:58:39 【问题描述】:我正在运行一个 .Net 应用程序。
我希望另一个 .Net 应用程序连接第一个应用程序并在其中一个对象上调用公共方法。
我知道我可以通过 WCF 做到这一点,但我的理解是 .Net 对象都是 COM 意义上的组件,因此我假设可以在同一台机器上跨进程边界编组。
这可能吗?如果是这样,我如何从第二个应用程序中获取第一个应用程序中的对象?
非常感谢您的帮助。
【问题讨论】:
我应该澄清一下,我知道它们不是 COM 可见对象。我的意思是它们是不同的组件,就像 COM 对象是一个组件一样。 techmikael.blogspot.com/2010/02/… 可能是相关的 【参考方案1】:从MarshalByRefObject 继承的任何对象都可以跨进程边界访问(但这与 COM 可见不同)。这就是 wcf 将在引擎盖下使用的内容。
但是,如果您使用 wcf 而不是(较低级别的)远程处理,那么您允许跨越机器边界的长期选项(远程处理也允许您这样做,但它比 wcf 更加复杂...... edit - 安全性也较低,如下面的 cmets 中 daniel 提供的链接所述)。
简而言之,我同意 Daniel 的观点 - 您最好还是坚持使用 WCF - 以备将来选择和易于使用。
【讨论】:
请详细说明可以跨进程边界访问对象的部分。你会用什么来实现这个目标? .Net 远程处理是 Nathan 所说的。 啊。这实际上已被 WCF 取代,不应再使用:msdn.microsoft.com/en-us/library/kwdt6w2k%28v=VS.100%29.aspx【参考方案2】:你的理解不正确。默认情况下,.NET 类不是 COM 对象。但是,您可以使它们在每个类的基础上或整个程序集中都可见。 话虽如此,这对您没有帮助,因为 COM 对象正在与使用它们的进程一起在进程内运行,即它在您的第二个应用程序中运行。您无法像这样连接到其他应用程序。 您确实应该使用 WCF 来完成这项任务。
【讨论】:
以上是关于如何在另一个进程中访问 .Net 对象?的主要内容,如果未能解决你的问题,请参考以下文章
Perl - 如何使用在另一个 Perl 脚本的模块中创建的进程句柄