2012-09-05 20 views
0

我正在運行帶有IIS的Windows 2008 Server 64位應用了修補程序2的ColdFusion 9,0,1,274733。當OnApplicationEnd事件觸發時,它不能再解析我在Application.cfc中定義的映射

我寫了一個cfc來處理日誌(用戶審計)到數據庫表。基本上我在請求週期的不同時間點調用這個cfc。在應用程序啓動,請求結束,應用程序結束以及發生錯誤時。這一切都很好,直到應用程序過期。

所以這裏是我的Application.cfc中的一些相關部分。 我定義映射到CFC的位置的任何cffunction之外,像這樣:

this.versionfolder="version1"; 
this.mappings["/modules"]="C:\Webroot\folder\#this.versionfolder#"; 

然後在上述應用程序事件,我可以叫我的日誌CFC像這樣:

<cfinvoke component="/modules/LogIt" method="Store" /> 

這正常工作,直到應用程序到期。當代碼觸發我CFINVOKE在OnApplicationEnd方法記錄模塊我得到這個錯誤:

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根目錄中每次都在應用程序結束時失敗。我的應用程序在子文件夾中每次都有效。不確定這是否相關,但是網絡根應用程序是在子文件夾應用程序之前啓動(訪問)的。儘管我只測試過網頁根應用程序,但仍然失敗。我也嘗試過使用點符號來表示組件名稱,但它仍然失敗。

+0

該組件的名稱是「LogIt」,但CF返回有關名爲「Log」的組件的消息?這是正確的還是隻是你的錯字? –

+0

哎呀,對不起,是的,這是我的一個錯字。我已更正錯誤消息中的錯字。 –

+0

沒有人遇到過這個問題嗎?任何人都知道可能會發生什麼?這並不是一個真正的表現障礙,因爲我只是想記錄應用程序已經結束的事實,但在這一點上,我很好奇它爲什麼在根目錄中失敗,而不是在子文件夾中。 –

回答

0

我只是做了一些研究,這是因爲我發現another question here asking much the same thing

My findings是在CF8-10中有一個導致Application.cfc集映射在onApplicationEnd()中不起作用(實際上在CF8中的onSessionEnd()中)。解決方法是在CFAdmin中設置映射。恐怕沒有太多的解決方法。

+0

非常感謝你對這個亞當的看法。我以爲我是唯一有這個問題的人。我已投票贊成您在Adobe提出的錯誤。正如我在錯誤和你的博客中提到的,我也會在這裏發帖。我有兩個Application.cfc文件;一個在webroot中,另一個在該webroot的子文件夾中。相同的代碼寫在每個的OnApplicationEnd中。子文件夾代碼將正常運行,但webroot代碼將無法解析映射。 –

0

onApplicationEnd在應用程序結束後觸發,因此應用程序範圍不再可用。 因爲您的子應用程序在其onApplicationEnd方法觸發時位於子文件夾中,所以它仍然可以訪問其父應用程序範圍。

Use the ApplicationScope parameter to access the application scope; you cannot reference the scope directly; for example, use Arguments.ApplicationScope.myVariable, not Application.myVariable. - docs

+0

ColdFusion映射(this.mappings)不是應用程序範圍的一部分。失敗的部分(在我看來)是在Application.cfc中定義的'/ modules'映射的解析(解除引用)。這兩個應用程序是分開的,它們不會互相訪問。 –

相關問題