我有一个对象在我的数据访问层(DAL)的内存缓存中处理,我需要在线程间持久化它。从我读过的最好的方法是使用httpcontext.item的代码如下所示:如何在不使用httpcontext.items的情况下在线程之间保持对象?
Shared Property DALList() As Dictionary(Of String, DAL)
Get
If Not Web.HttpContext.Current.Items.Contains("_DALList") Then
Web.HttpContext.Current.Items.Add("_DALList", New Dictionary(Of String, DAL))
End If
Return Web.HttpContext.Current.Items("_DALList")
End Get
Set(ByVal value As Dictionary(Of String, DAL))
If Not Web.HttpContext.Current.Items.Contains("_DALList") Then
Web.HttpContext.Current.Items.Add("_DALList", value)
Else
Web.HttpContext.Current.Items("_DALList") = value
End If
End Set
End Property
两个问题:这种试图序列化对象,如果是的话我怎么得到它离开该对象不变只是在内存中引用它而不是序列化它?我需要保持对象完整,因为它处理数据库连接和缓存下的封面。
[编辑]
当我运行此我得到的是导致页面挂一个错误。事件日志中有两个项目。
错误的应用程序程序w3wp.exe,版本7.0.6001.18000,时间戳0x47919ed8,错误模块kernel,版本6.0.6001.18000,时间戳0x4791ada5,异常代码0xe053534f,故障偏移0x000000000002649d,进程ID为0x%9,应用程序启动时间0x%10。
和
状态服务器已关闭超时的TCP/IP连接。客户端的IP地址是127.0.0.1。过期的Read操作从04/07/2009 20:44:29开始。
然后,我重新编码将项目放入字典对象的会话ID,我得到这些smae错误。如果我使用静态变量,它工作正常,但我有我的原始问题,即用户将访问其他用户的数据(显然这不是一个选项)。
的重新散列版本是如下:(这适用于第一种方法,但不是这一个)
Shared _CurrentScope As New Dictionary(Of String, DALScope)
Public Shared Property CurrentScope() As DALScope
Get
If Not _CurrentScope.ContainsKey(Web.HttpContext.Current.Session.SessionID & "_CurrentScope") Then
_CurrentScope.Add(Web.HttpContext.Current.Session.SessionID & "_CurrentScope", New DALScope)
End If
Return _CurrentScope(Web.HttpContext.Current.Session.SessionID & "_CurrentScope")
End Get
Set(ByVal value As DALScope)
If Not _CurrentScope.ContainsKey(Web.HttpContext.Current.Session.SessionID & "_Currentscope") Then
_CurrentScope.Add(Web.HttpContext.Current.Session.SessionID & "_Currentscope", value)
Else
_CurrentScope(Web.HttpContext.Current.Session.SessionID & "_Currentscope") = value
End If
End Set
End Property
[编辑]
好点onthe的情况下锁定,其中疗法是在同一届会议上不止一次网络请求。我结束了使用httpcontext.item的方法,发现我的问题与属性是一个byval而不是byref。我已经改变了我的代码,包括通过ref处理对象的方法,现在它可以工作。
我只需要一个请求期间的对象。然而,现在我已经将它放入集合中,它无法正常工作。该集合是否返回对象(byval)或对象本身(byref)的副本? – Middletone 2009-04-08 00:22:08