【问题标题】:Global Assembly and Remoting全局组装和远程处理
【发布时间】:2011-09-08 23:03:23
【问题描述】:

我对组装和远程处理有些困惑,所以我想和你澄清两点。

1)远程处理用于同一台或不同计算机中的两个应用程序之间的通信,所以我的问题是如果两个应用程序都在同一台计算机上,是否需要进行远程处理,因为我们可以使用私有程序集或全局程序集直接与 out 交互客户端应用程序,那么如果程序集或应用程序都在同一台计算机上,那么远程处理的目的是什么。

2) 如果程序集是公共的,即全局程序集,并且客户端应用程序当时正在调用该程序集,它们都在相同或不同的 appdomain 中运行?如果在这种情况下相同,如果许多应用程序使用相同的全局程序集,那么是否会创建该全局程序集的这么多实例?如果不是,那么当我使用全局程序集时,他们是否在内部使用远程处理。

更新:

1) 如果我使用全局缓存中存在的程序集,无论它是在与调用此应用程序的客户端相同的应用程序域中运行还是在不同的应用程序域中运行。

2) 如果多个应用程序使用相同的全局缓存程序集,那么该程序集是在另一个应用程序域中运行还是在客户端应用程序的同一应用程序域中运行,所以在这种情况下,i4 4 应用程序使用它在 4 中运行的相同程序集应用程序域。

3) 如果全局缓存的程序集在不同的应用程序域中运行,那么它们是否在内部使用远程处理与客户端通信。

请注意,这里我说的是应用程序域,而不是所有应用程序运行的进程。


我没有得到适当的澄清。请逐步回答我的问题

1) 如果我使用全局缓存中存在的程序集,无论它是在与调用此应用程序的客户端相同的应用程序域中运行还是在不同的应用程序域中运行。

2) 如果多个应用程序使用相同的全局缓存程序集,那么该程序集是在另一个应用程序域中运行还是在客户端应用程序的同一应用程序域中运行,所以在这种情况下,i4 4 应用程序使用它在 4 中运行的相同程序集应用程序域。

3) 如果全局缓存的程序集在不同的应用程序域中运行,那么它们是否在内部使用远程处理与客户端通信。

请注意,这里我说的是应用程序域,而不是所有应用程序运行的进程。

谢谢。

【问题讨论】:

    标签: c# remoting


    【解决方案1】:

    你错了。没有全局程序集。有一个全局程序集缓存。即使程序集不存在,只要知道在哪里可以找到它,任何人都可以访问它。

    当您在多个进程中加载​​同一个程序集时,您无法通过它共享信息。两个进程都有自己的私有内存区域,程序集的代码是共享的,但没有任何数据。

    如果您想在不同或相同的计算机上进行通信,您可以使用远程处理,尽管现在 WCF 比远程处理更受欢迎。如果你想在同一台计算机上进行进程间通信,有更快但不一定更简单的方法,比如套接字、共享内存、命名管道等。关于这个主题有很多文献。

    【讨论】:

      【解决方案2】:

      让我试试看能不能用一个例子来解释一下

      我在机器“A”上的 GAC 中安装了程序集“common.dll”

      现在,我有 2 个应用程序“应用程序 1”和“应用程序 2”,它们都使用“common.dll” 注意:此处的“使用”与共享 common.dll 中的类型定义严格相关,而不是它们的 STATE

      “应用程序 1”和“应用程序 2”都在各自的进程中运行(为简单起见,假设这两个应用程序都是控制台应用程序)。因此,如果应用程序 1 想要将信息传递给应用程序 2 - 这并非易事,因为它涉及进程间通信。

      这就是“远程处理”的用武之地。它允许“应用程序 1”向“应用程序 2”发送消息,以便它们可以在运行时相互共享信息。

      远程处理基本上是 .NET 框架中的一层类,它向您隐藏进程间通信如何发生的细节。

      注意:此时远程处理已被 WCF 取代,建议使用 WCF 来满足所有进程外通信需求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 2010-11-08
        相关资源
        最近更新 更多