在经典ASP中为自定义数据库构建连接池

时间:2009-12-25 19:04:41

标签: iis vb6 asp-classic

在我的实际应用程序中,我有一个从经典ASP页面调用的VB6 DLL。该应用程序调用非标准数据库。

我想拥有一个永久保持活力的连接池类。我设置了编译标志以将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:&gt;&gt;&gt;主要叫 - 106369.578
  25/12/2009 18:03:07:&gt;&gt;&gt; Initialise叫 - 106369.578
  25/12/2009 18:03:07:&gt;&gt;&gt; TestClass2 init - 106369.578
  25/12/2009 18:03:07:&gt;&gt;&gt; TestA - 106369.578
  25/12/2009 18:03:07:&gt;&gt;&gt; TestClass2终止 - 106369.578
  25/12/2009 18:38:04:&gt;&gt;&gt;主要叫 - 108467.261
  25/12/2009 18:38:04:&gt;&gt;&gt; Initialise叫 - 108467.276
  25/12/2009 18:38:04:&gt;&gt;&gt; TestClass2 init - 108467.276
  25/12/2009 18:38:04:&gt;&gt;&gt; TestA - 108467.276
  25/12/2009 18:38:04:&gt;&gt;&gt; TestClass2终止 - 108467.276

请注意,main()被调用两次,但前提是它们之间有很长的空闲时间。永远不会调用Terminate类的TerminateDetect方法。

问题

DLL发生了什么?如果此体系结构不起作用,我该如何构建连接池?

1 个答案:

答案 0 :(得分:2)

这是一个经典的测试问题。您将修改ASP会话超时,但您很可能已将整个应用程序池空闲超时留在20分钟。您需要打开运行应用程序的应用程序池属性并延长空闲超时。

您可能希望将ASP会话超时返回到其原始值,而不是您真正想要修改的值。它不是单个会话的生命周期,您希望延长其应用程序的生命周期,即使您想要延长空闲时间。你甚至可能在现实世界中质疑它。