跨 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 的静态类变量的主要内容,如果未能解决你的问题,请参考以下文章