我的 ASP.NET 2.0 应用程序的连接字符串之一出现问题。在某些情况下,我会得到一个ConnectionString Property Has not Being Initialized问题,该问题随机、间歇性地发生,没有任何原因。
我的连接字符串实际上来自网络服务,因为不同类型的用户会根据他们的用户级别提供不同的连接字符串集。
到目前为止我所做的事情是这样的:
我有一个母版页 ( mstr.page
) 和 ( ) 后面的相应代码mstr.page.vb
。
在我的母版页中,我最初检索连接字符串并将其存储到会话变量中,即
Session("ConnString") = "RetrievedConnectionString"
现在在我的一个页面中,让我们说page1.aspx.vb
,我使用来自一个类(名为 )的公共共享函数,MyClass.vb
并在我的page1.aspx.vb
.
一些代码供参考:
[MyClass.vb]
Imports System.Web
NameSpace ClassNameSpace
Public Class Admin
Protected Shared da as New DataAccess()
Public Shared Function MYFunction() as String
'Execute some sql statements here, using the DataAccess
stringToReturn = Ctype(da.ExecuteScalar("SQLCommand"), String)
Return stringToReturn
End Function
End Class
End NameSpace
[DataAccessClass.vb]
Public Class DataAccess()
Private m_ConStr As String = ""
Public Sub New()
m_ConStr = HttpContext.Current.Session("ConnString")
End Sub
'Some methods for SQL statement execution (ExecuteQuery, ExecuteScalar)
End Class
[Page1.aspx.vb]
Imports ClassNameSpace
Protected Sub Page_Load(....) Handles Me.Load
Dim strValue as String = Admin.MyFunction()
End Sub
我已经将代码放在上面,以向您展示事情进展的一些粗略想法。
基本上,该函数Admin.MyFunction()
有时会失败,因为在数据访问类中,连接字符串似乎已经失去了它的价值(空白或无)。
这已经困扰我很久了。
我希望有人能指出我正确的方向来解决这个问题。基本上,我希望每个访问 Web 应用程序的用户检索到的连接字符串始终保持不变并在任何地方使用。会话变量似乎不是最合适的,因为当 ASP.NET 回收其进程时,会话就会丢失。
顺便说一句,我最初是通过 Web 服务的母版页检索连接字符串。当条件是会话变量丢失时,我尝试在数据访问类中放置相同的检索函数,但我认为我的应用程序在回收过程中无法连接到 Web 服务。
对此的任何建议将不胜感激。
对此进行更新:
我尝试使用会话变量并将模式设置为状态服务器,但显然我正在使用的某些 DLL 无法序列化,因此我又回到了原点。
有一个更好的方法吗?