2012-11-12 49 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开始。 –