oracle - ColdFusion - 重复的 POST 被解雇

标签 oracle coldfusion

我发生了一件非常奇怪的事情,似乎无法追踪它。我有一个带有简单表单的简单 CFM,用户按下提交按钮,页面 POST 到自身,然后使用 <cfinvoke> 调用 CFC 函数.被调用的函数有一个 <cfstoredproc>调用甲骨文。该 Oracle 过程应该创建大约 3,000 多条记录。但它创造的数量正好是这个数量的两倍。我放了一个 <cflog>就在 <cfstoredproc> 之前调用并创建了 2 个条目。所以这个函数以某种方式被第二次触发。相同的用户,相同的 SessionID,不同的 ThreadID。我不知道第二个电话是从哪里来的。

  • 我只按了一次按钮。
  • 我看了网络流量,我只看到了一个 POST。

我放了一个<cflock> <cfstoredproc>周围调用并解决了问题,现在只创建了 3000 多个记录。但是现在我收到了这个神秘的第二次调用的锁定超时错误。

另一个奇怪的事情是 <cflock>超时时间为 30 秒。但是 <cflog>最初只显示 1 个条目,然后恰好 60 秒后出现第二个日志条目并且 <cflock>错误发生。我放弃了 <cflock>超时减少到 15 秒,结果仍然相同。为什么第二次神秘通话每次都在第一次通话后恰好 1 分钟被记录?

我正在运行 ColdFusion 10,0,13,287689。

"Severity","ThreadID","Date","Time","Application","Message"

"Information","ajp-bio-8012-exec-9","06/26/14","14:59:34",,"D:\ColdFusion10\cfusion\logs\cbruserwo_cfc.log initialized"
"Information","ajp-bio-8012-exec-9","06/26/14","14:59:34","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-7","06/26/14","15:00:35","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

"Information","ajp-bio-8012-exec-12","06/26/14","15:08:36","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-5","06/26/14","15:09:37","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

"Information","ajp-bio-8012-exec-1","06/26/14","15:19:54","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-7","06/26/14","15:20:57","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

我将 Application.cfc 与 onRequest 一起使用和 onCFCRequest方法(以及其他常用方法)。

部分代码...

<cfcomponent>
<cffunction name="create" access="public">
...removed some trivial code...

<!--- START: debug this craziness --->
<cflock timeout="30" name="A-#form.cbrorderunid#">
    <cfif not isdefined("session.cbruserwo_cfc.calledcnt")>
        <cfset session.cbruserwo_cfc.calledcnt = 1>
    <cfelse>
        <cfset session.cbruserwo_cfc.calledcnt = session.cbruserwo_cfc.calledcnt+1>
    </cfif>

    <cflog file="cbruserwo_cfc" text="#session.sv.un# // #session.sv.fullname# // #session.sv.csid# // lockname: B-#form.cbrorderunid#">

    <cfsavecontent variable="xxx">
        <cfoutput>
        session.cbruserwo_cfc.calledcnt: #session.cbruserwo_cfc.calledcnt#<br>
        CGI: <cfdump var="#cgi#">
        FORM: <cfdump var="#form#">
        URL: <cfdump var="#url#">
        ARGUMENTS: <cfdump var="#arguments#">
        </cfoutput>
    </cfsavecontent>
    <cffile action= "write" file="D:\temp\cbruserwo_cfc.html" addNewLine="no" output="#xxx#">
</cflock>
<!--- END: debug this craziness --->

<!--- The debug code above shows another POST/call/request something being made, but the network traffic shows only 1 POST happening --->

<cflock timeout="30" name="B-#form.cbrorderunid#">
    <cfstoredproc>
        <!---
        This is the call that would do the 3000+ inserts, omitted contents, irrelavent to question.
        The cflock around it fixes the duplicate records from being created, but now I get lock timeout
        errors from this mysterious second request.
        --->
    </cfstoredproc>
</cflock>
 ...removed some trivial code...
</cffunction>
</cfcomponent>

更新...

有些人要求提供所有代码,有些人说不要发布所有代码,所以我不知道你们究竟想要什么。我承认这很奇怪。我们最近添加了 application.cfc->onRequest 函数。不确定这是否与它有关。但此时它所做的只是……

<cffunction name="onRequest" access="public">
    <cfargument name="TargetPage" type="string" required="true" />

    <!--- Make these functions globally accessible --->
    <cfset structAppend(url, createObject("component", "lib_globalfunctions"))>

    <!--- Include the requested page. --->
    <cfinclude template="#ARGUMENTS.TargetPage#" />
</cffunction>

我还检查了所有 Apache ssl_requeSTLog,只有一个帖子发生了。这就是为什么我没有显示我的任何 html、表单、按钮、提交代码的原因。

我将尝试删除所有自定义标签/专有代码,并提出该错误的基本通用复制。如果可以的话,我会重写这个问题并发布。这需要一些时间。只是想知道以前是否有人听说过这样的错误,看起来没有人听说过,谢谢。

更多更新...

它看起来越来越不像 ColdFusion 问题。

每个要点对于每个用户都是可重复的。

  • ME - 最新版本的 Chrome,第二个神秘请求发生。
  • 另一位用户 - 同一栋楼,相同版本的 Chrome,没有第二次请求。
  • ME - IE10,没有第二个请求。
  • 另一位用户 - 在 IE10 大楼外,出现了第二个神秘请求。

最佳答案

检查您的 application.cfc/application.cfm 并查看 onRequest 函数中是否存在对 POST 数据的任何操作。

关于oracle - ColdFusion - 重复的 POST 被解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439969/

相关文章:

arrays - 使用ColdFusion遍历数组

mysql - 我的 CFQUERYPARAM 出错

oracle - Oracle 11g 的 NHibernate TransactionScope 问题

oracle - 启动Grails应用程序时无法创建池的初始连接

c# - Entity Framework - 将动态连接字符串与 Oracle 提供程序一起使用

mysql - 使用新标签填充自动完成列表

sql - 如何同时运行两个慢速 SQL SELECT 语句

sql - 为什么 LTRIM 函数没有返回预期结果

coldfusion - 如何在 Coldfusion 中从 Active Directory 的根目录进行搜索

session - ColdFusion SessionTracker 并强制 session 结束