У меня возникли проблемы с одной из строк подключения моего приложения ASP.NET 2.0. Бывают случаи, когда я получаю ошибку Свойство ConnectionString не было инициализировано, которая возникает случайным образом, с перерывами и без какой-либо причины.
Моя строка подключения на самом деле исходит от веб-службы, потому что разным пользователям предоставляются разные наборы строк подключения в зависимости от их уровня пользователя.
То, что я сделал до сих пор, выглядит следующим образом:
У меня есть главная страница (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() иногда дает сбой, потому что в классе доступа к данным строка подключения, похоже, потеряла свое значение (либо пустое, либо ничего).
Это беспокоит меня уже довольно давно.
Я надеюсь, что кто-то может указать мне в правильном направлении, чтобы решить эту проблему. По сути, я хочу, чтобы моя строка подключения, которая извлекается каждым пользователем, посещающим веб-приложение, сохранялась все время и использовалась где угодно. Переменная сеанса не подходит, поскольку, когда ASP.NET перезапускает свой процесс, сеанс теряется.
Кстати, сначала я получаю строку подключения через главную страницу из веб-службы. Я попытался поместить ту же функцию извлечения в класс доступа к данным, когда условия заключаются в том, что переменная сеанса потеряна, но я думаю, что мое приложение не может подключиться к веб-службе во время процесса перезапуска.
Любой совет будет принят с благодарностью по этому поводу.
Обновление по этому поводу:
Я попытался использовать переменную сеанса и установить режим State Server, но, по-видимому, некоторые библиотеки DLL, которые я использую, не могут быть сериализованы, поэтому я вернулся к исходной точке.
Есть лучший способ сделать это?