ASP 错误 0223 - 找不到 TypeLib,间歇性,IIS 重启后解决

ASP Error 0223 - TypeLib Not Found, intermittent, resolved after IIS restart

我目前正在将 ASP 平台从 Windows 2003 R2 IIS 6 Web 服务器迁移到 Windows 2012 R2 IIS 8.5 Web 服务器。我正处于将多个站点迁移到两个独立的 2012 年 Web 服务器的阶段,一切看起来都很棒,客户和开发人员都很高兴......但是在其中一个托管几天后出现以下错误新服务器。

Active Server Pages error 'ASP 0223'

TypeLib Not Found

/jobboard/conf/constants.vbs.inc, line 1

METADATA tag contains a Type Library specification that does not match any Registry entry.

METADATA 标签如下:

<!--METADATA TYPE="typelib" NAME="Microsoft ActiveX Data Objects 2.8 Library" UUID="{2A75196C-D9EB-4129-B803-931327F72D5C}" VERSION="2.8"-->

在此服务器上重新启动 IIS 解决了问题(尽管是暂时的)。

几天后,生产中的其他 2012 web 服务器出现了同样的错误,再次重新启动 IIS,现在可以正常工作。

我已经检查了注册表,并且存在具有正确 UUID 和正确权限的相关标签。

它不会影响服务器上的所有站点,只会影响特定应用程序池中的所有站点。

应用程序池使用域用户身份,站点被分成多个共享池。

我记得有一个 ADOVBS.inc 的包含文件,其中包含所有 ADO 常量,并将其作为标准 ASP 包含在我的全局包含文件中,该文件包含在站点的每个页面上。

这是在我使用包含文件的 META 方式之前。

所以也许最后的手段是恢复到在 ADO 常量中加载的方法。

似乎达到了某种阈值,CPU/Memory?,这会阻止 IIS caching/loading 从注册表中导入文件。然后这会导致错误和池的回收。由于没有重定向到 500.100.asp 错误处理程序页面,该页面向用户隐藏了错误详细信息。这表明错误在 IIS 中并且与服务器有关。

谢谢

我现在已经确定是什么导致了上述问题...

我们在 IIS 上的站点 运行 在许多共享应用程序池中 运行 宁作为域用户。我们也有一个 Windows 调度程序作业,它 运行 整夜执行许多脚本,这些脚本也 运行 作为同一域用户。

似乎在某些情况下,此调度程序作业 运行s 会干扰 IIS 工作进程。当它完成并结束其用户会话时,它会卸载内存中的注册表文件,w3wp.exe 进程也可以使用该文件。

此错误出现在事件日志中...

Windows detected your registry file is still in use by other applications or services. The file will be unloaded now. The applications or services that hold your registry file may not function properly afterwards. No user action is required.

连同对 w3wp.exe 进程的引用当前 运行ning。

当我以域用户终端服务进入,一段时间后再次注销时,复制了。事件日志显示了错误,不久之后所有站点都被轰炸了。

运行作为不同用户的预定作业已为我们解决了这个问题。