【发布时间】:2009-10-22 11:17:38
【问题描述】:
我有一个基于 ASP、VB6、COM 和 SQL Server 的解决方案。 Web 服务器是 IIS 6。
不定期地,我在 ASP 页面上收到以下错误消息:
Microsoft VBScript runtime (0x800A01FB)
An exception occurred: 'objPSM.GetValue'
(其中“objPSM”是我自己的会话处理 COM 类)。
如果我重新加载页面,它会起作用。
我尝试用谷歌搜索错误代码,它出现了这篇文章 (http://support.microsoft.com/kb/262681),但这不适用于我的问题,因为我不使用 Session 对象——我有自己的使用 cookie 的会话处理代码以及存储状态的数据库。
下面是爆出来的VB代码:
Public Function GetValue(ByVal pSessionID As String, _
ByVal pName As String) As String
Dim ErrSource As String
Dim ErrNumber As Long
Dim ErrDescription As String
On Error GoTo Err_Handler
Dim lConn As ADODB.Connection
Dim cmd As ADODB.Command
Dim lReturnValue As String
Set lConn = GetDBConn
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = lConn
cmd.CommandText = "pss_getvalue"
cmd.Parameters.Append cmd.CreateParameter("p_pss_id", adVarChar, adParamInput, 36, pSessionID)
cmd.Parameters.Append cmd.CreateParameter("p_pss_name", adVarChar, adParamInput, 35, pName)
cmd.Parameters.Append cmd.CreateParameter("p_pss_value", adVarChar, adParamOutput, 255)
cmd.Execute , , adCmdStoredProc
lReturnValue = Nvl(cmd.Parameters("p_pss_value").Value, "")
lConn.Close
Set cmd = Nothing
Set lConn = Nothing
GetValue = lReturnValue
Exit_Procedure:
Exit Function
Err_Handler:
ErrSource = Err.Source
ErrNumber = Err.Number
ErrDescription = Err.Description
On Error Resume Next
Call LogEvent(ErrSource & ".GetValue: ", ErrNumber & ": " & ErrDescription)
GetValue = ""
GoTo Exit_Procedure
End Function
请注意,即使此处有错误处理程序,代码也永远不会到达此处,因为 VB 运行时停止并引发异常,从而导致 ASP 页面损坏,而不是静默记录并返回空白字符串。
有人知道错误代码(0x800A01FB)是什么意思吗?
更新:与托管服务提供商交谈,他们回收了 IIS 应用程序池。错误消失了。如果问题再次出现,将返回此问题。
【问题讨论】:
-
您是否尝试应用支持文章中的补丁?
-
你用什么来创建你自己的会话处理 COM 类? VB6 会是一个很好的猜测吗?
-
是的,如上所述,该解决方案基于调用 VB6 COM DLL 的 ASP 页面,该 DLL 反过来与 SQL Server 数据库通信。
标签: com asp-classic vbscript