Создание пула соединений для пользовательской базы данных в классическом ASP - PullRequest
1 голос
/ 25 декабря 2009

В моем реальном приложении у меня есть VB6 DLL, которая вызывается из классических ASP-страниц. Приложение вызывает нестандартную базу данных.

Я хочу иметь класс пула соединений, который будет постоянно существовать. Я установил флаги компиляции, чтобы DLL оставался в памяти, но, несмотря на это, пул периодически уничтожался.

Я уже пытался изменить время ожидания сеанса ASP и количество потоков на процессор, ни одна не работает.

Предыдущий респондент сказал мне, что ODBC может обрабатывать поведение пула для меня, но это бесполезно в этом проекте, так как мне приходится взаимодействовать с базой данных через некоторые специальные объекты базы данных.

Фрагмент кода ASP

<%
set obj1 = server.CreateObject("LukeTestProj.TestClass2")
obj1.TestA
% >

Фрагмент приложения

MainFn.bas

Option Explicit  
Dim x As TerminateDetect  

Sub Main()  
LogMessage "main called"        ‘simple write to file function  
    Set x = New TerminateDetect  
End Sub

TestClass2.cls

Option Explicit

Public Sub TestA()  
    LogMessage "TestA"  
End Sub

Public Sub TestB()  
    LogMessage "TestB"  
End Sub

Private Sub Class_Initialize()  
    LogMessage "TestClass2 init"  
End Sub

Private Sub Class_Terminate()  
    LogMessage "TestClass2 terminate"  
End Sub

TerminateDetect.cls

Option Explicit

Private Sub Class_Initialize()  
LogMessage "Initialise called"  
End Sub

Private Sub Class_Terminate()  
LogMessage "Terminate called"  
End Sub

Пример файла журнала содержит

25/12/2009 18:03:07: >>> основной номер - 106369,578
25/12/2009 18:03:07: >>> инициализация называется - 106369,578
25.12.2009 18:03:07: >>> TestClass2 init - 106369.578
25/12/2009 18:03:07: >>> TestA - 106369,578
25/12/2009 18:03:07: >>> Завершение TestClass2 - 106369,578
25/12/2009 18:38:04: >>> Основной номер - 108467.261
25/12/2009 18:38:04: >>> Вызов инициализирован - 108467.276
25/12/2009 18:38:04: >>> TestClass2 init - 108467.276
25/12/2009 18:38:04: >>> TestA - 108467.276
25/12/2009 18:38:04: >>> Завершение TestClass2 - 108467.276

Обратите внимание, что main() вызывается дважды, но только если между ними очень длинный период простоя. Метод Terminate класса TerminateDetect никогда не вызывается.

Вопрос

Что происходит с DLL? Если эта архитектура не работает, как я могу создать пул соединений?

1 Ответ

2 голосов
/ 25 декабря 2009

Это классическое тестирование. Вы изменили время ожидания сеанса ASP, но, скорее всего, оставили время ожидания общего пула приложений на 20 минут. Вам нужно открыть свойства пула приложений, в которых вы запускаете приложение, и увеличить время простоя.

Возможно, вы захотите вернуть тайм-аут сеанса ASP к его первоначальному значению, а не к значению, которое вы действительно намеревались изменить. Это не время жизни отдельного сеанса, вы хотите продлить время жизни приложения, даже если простаиваете, что вы хотите продлить. Вы могли бы даже подвергнуть сомнению это в реальном мире.

...