ASP.NET - 上下文敏捷对象,应用程序域中的数据共享概念?

Posted

技术标签:

【中文标题】ASP.NET - 上下文敏捷对象,应用程序域中的数据共享概念?【英文标题】:ASP.NET - context-agile object,Data sharing concept in application domain? 【发布时间】:2009-09-22 21:34:56 【问题描述】:

看了一些关于Application Domain的文章,深读终于翻来覆去 困惑。所以我将问题提交给学科专家。

1) 由于 CLR 负责在需要时创建 AppDomain,因此是否存在关键问题 需要手动创建应用程序域吗?

2)我听说一个应用程序域不能与其他应用程序域共享数据(我 不确定)。windows通信基金会的案例呢?

3) 通常,基本库(system.dll、mscorlib.dll)加载在默认应用程序域中。我可以将它们加载到自定义创建的应用程序域中吗?如果可能,CLR 会在默认应用程序域中保留一份副本吗?

喜欢

 ------------------                   ----------------
    Default AppDomain                    Custom Appdomain
   -------------------                   ----------------

     mscorlib.dll                         mscorlib.dll

     System.dll                           System.dll



     .....                                .......
    -----------------                    -----------------

4) 应用领域中的上下文敏捷对象指的是什么?

【问题讨论】:

【参考方案1】:

    当您需要隔离(例如沙箱化第 3 方代码)或重新加载执行期间发生更改的代码的能力时,有时创建自己的 AppDomain 很有用。 (您无法卸载程序集,但可以卸载 AppDomain。)

    在 AppDomain 之间共享数据涉及编组。如果您的对象派生自MarshalByRefObject,则数据可以按值(即所有内容都被复制)或通过引用进行编组。在后一种情况下,实际上 传递到另一个AppDomain 的是对代理对象的引用。您在代理上所做的任何事情实际上都是对原始AppDomain 中的真实对象进行的。

    不完全确定您的意思。您当然可以使用其他 AppDomain 中的所有系统程序集。

    我没遇到过这个词,我记得。

【讨论】:

【参考方案2】:

AppDomains 可以使用服务将信息从一个传递到另一个,例如您在问题 2 中所说的 WCF。

【讨论】:

以上是关于ASP.NET - 上下文敏捷对象,应用程序域中的数据共享概念?的主要内容,如果未能解决你的问题,请参考以下文章

[译] ASP.NET 生命周期 – ASP.NET 上下文对象

[译] ASP.NET 生命周期 – ASP.NET 上下文对象

使用 ASP.net 更改 HTML 文本区域中的字体名称和大小

ASP.NET 应用程序状态与静态对象

ASP.NET MVC 上下文对象使用单例

在中等信任的 ASP.Net 中读取程序集 Guid 而不锁定 appdomain 中的 DLL