我正在运行 ColdFusion 9,0,1,274733,并在带有 IIS 的 64 位 Windows 2008 Server 上应用了修补程序 2。
我编写了一个 cfc 来处理数据库表的日志记录(用户审计)。基本上,我在请求周期的不同时间点调用了这个 cfc。在应用程序启动时、请求结束时、应用程序结束时以及发生错误时。在应用程序到期之前,这一切都运行良好。
下面是我的 Application.cfc 中的一些相关部分。我正在定义到任何 cffunction 之外的 cfc 位置的映射,如下所示:
this.versionfolder="version1";
this.mappings["/modules"]="C:\Webroot\folder\#this.versionfolder#";
然后在前面提到的应用程序事件中,我可以像这样调用我的日志记录 cfc:
<cfinvoke component="/modules/LogIt" method="Store" />
这工作正常,直到应用程序过期。当代码在 OnApplicationEnd 方法中为日志记录模块触发我的 cfinvoke 时,我收到此错误:
Message: Could not find the ColdFusion component or interface /modules/LogIt.
Detail: Ensure that the name is correct and that the component or interface exists.
我知道 cfc 存在,它在应用程序的整个生命周期中一直以相同的方式调用它。有没有其他人看到过这种行为?
为了解决这个问题,我遇到此问题的应用程序位于 Web 根目录中。我有另一个应用程序,在同一台服务器上运行,它位于该应用程序的子文件夹中(它们具有不同的应用程序名称)。我在 Application.cfc 中使用完全相同的逻辑,通过该应用程序的映射引用相同的日志记录 cfc,它在应用程序端运行良好。我很困惑,无法在网上找到任何关于这个特定场景的信息。
需要明确的是,我在 Web 根目录中的应用程序每次在应用程序端都失败。我在子文件夹中的应用程序每次都有效。不确定这是否相关,但 Web 根应用程序在子文件夹应用程序之前启动(访问)。尽管我只测试了访问 Web 根应用程序,但它仍然失败。我也尝试过对组件名称使用点表示法,但它仍然失败。