跨 appdomain 的静态类变量

Posted

技术标签:

【中文标题】跨 appdomain 的静态类变量【英文标题】:Static class variable across appdomain 【发布时间】:2015-06-16 13:43:09 【问题描述】:

到目前为止,我正在构建一个 Web 服务器库;允许 php、asp.net,当然还有静态内容。

这个库的主引擎位于调用可执行文件的 appdomain 中。

该库有一个“运行时”类,其目的是存储不同类型的静态属性。这些属性是从 exe 的 appdomain 中填充的。

现在,asp.net 运行时要求它位于一个单独的域中,这可以正常工作

ApplicationManager.CreateAppDomain(typeof(ASPHost), "/", DocumentRoot)

但是,从 asp.net 运行时(位于单独的 appdomain 中)我无法从“运行时”获取我的静态属性(从 asp.net appdomain 获取值时它们不会被填充)

我对“MarshallByRefObject”没有太多经验,但我的搜索经常提到这个。

从“MarshallByRefObject”派生我的“运行时”类

 public class Runtime : MarshalByRefObject

仍然会产生空值/空白值。

【问题讨论】:

MarshalByRefObject 仅适用于 instances,不适用于 static 数据。您可能可以创建一个“代理”对象,该对象被发送到新的应用程序域,可以“编组”静态数据。 谢谢 D,asp.net 运行时只会在每个进程运行期间实例化一次,我需要实时访问静态属性(因为它们可能会在整个周期中发生变化)我仍然感兴趣在你的方法中..你能举个例子吗? 你不能创建一个调用静态的实例方法吗? 这就是我所做的......但后来忽略了我在静态类中使用套接字引用的事实——它不能被序列化。 :( 无论如何,我都以不同的方式进行了......我需要的是 ASP.NET 运行时已知的端点(用于服务器变量要求) IPEndpoints 可以序列化(因此可以跨越域障碍)我只是将它们包含在 asp.net 运行时中的方法中(我有一个代理类,它在 asp.net 域中创建一个“蠕虫整体” 【参考方案1】:

嗯,那是井喷。

我忽略了我的运行时类中有一个套接字字典这一事实,所以即使我要解决这个问题......我仍然会遇到传递这种类型对象的问题。

【讨论】:

以上是关于跨 appdomain 的静态类变量的主要内容,如果未能解决你的问题,请参考以下文章

跨 AppDomain 事件问题

跨 AppDomain 的自定义序列化

jquery ajax响应+不同AppDomain中的函数调用流程

跨 dll 使用静态类变量/函数

AppDomain 之间是不是共享静态类? [复制]

C# - 从另一个 AppDomain 中的方法返回值