2012-11-12 78 views
1

我正在使用ColdFusion 8和jQuery。如何處理CFLOCK超時錯誤?

我正在通過jQuery執行幾個ajax調用的頁面上工作。很多時候,我在通過ajax調用的某個頁面上看到應用程序超時錯誤。我不會在每個Ajax調用中都收到錯誤消息。我每次都沒有在同一個電話上看到錯誤。

從我所瞭解的錯誤是由不同的網頁每個試圖在同一時間訪問相同的應用程序變量引起的。我不確定解決問題的最佳方法是什麼。

該代碼似乎設置了兩秒超時。這似乎過分。 cflock是否應該只讀?任何其他建議?

A timeout occurred while attempting to lock the Application scope. 

The error occurred in E:/INETPUB/WWWROOT/DEV/AVCAT/Application.cfm: line 53 
Called from E:/INETPUB/WWWROOT/DEV/Application.cfm: line 1 
Called from E:/INETPUB/WWWROOT/DEV/Application.cfm: line 53 
Called from E:/INETPUB/WWWROOT/DEV/Application.cfm: line 1 

51 : 
52 : <!---<cfif NOT IsDefined("application.datasource")>---> 
53 : <cflock timeout="#CreateTimeSpan(0,0,2,0)#" SCOPE="Application"> 

回答

3

cflock的標籤的屬性timeout期待秒。所以,如果你想在兩分鐘超時時間比timeout屬性應設定爲120,這樣的(我同意,似乎過高):

<cflock timeout="120" SCOPE="Application"> 

CreateTimeSpan()函數返回的日期/時間對象。我不確定您的cflock是如何解釋超時值的。

至於使用exclusive鎖與readonly鎖。如果您的代碼只是讀取應用程序範圍變量,而不是使用readonly鎖定。如果您的代碼正在設置應用程序範圍變量,則使用exclusive鎖定。使用exclusive鎖,通過未指定type屬性使用該鎖,將導致該代碼爲單線程。那可能是你的問題。

+6

'createTimespan(0,0,2,0)'給出數字'0.001388 ...' - 即僅在1.4ms以下 - 對於數據庫查詢來說沒有太多時間! –

+0

只需注意:'createTimespan()'不返回日期/時間對象,它會返回天數(或其中的一部分)。這只是一個雙。 'createTimespan(1,0,0,0)'返回1; 'createTimespan(0,12,0,0)'返回0.5等。 –

+1

我也想看看你在鎖定什麼。看起來你只是鎖定了'application.datasource'的賦值,這幾乎可以肯定只是在一個語句中設置一個簡單的字符串值。如果是這樣的話:它根本不需要被鎖定。無論如何,從CF5開始。 –