我遇到了一个奇怪的问题,我几天都在摔跤。我希望有人会有一些见解。
我有一个Flex应用程序,它使用标准远程处理通过ColdFusion访问SQL数据库。 (Flex sdk 3.4(是,旧),CF 10)
我最近发现了一个问题,如果cffunction的参数包含一个字符串可能一个非常大的数字(例如“2e4361251”),则远程结果/错误处理程序在我的AS代码很长时间都不会被调用,有效地锁定了应用程序。 (App逻辑要求我在继续之前等待此操作完成。)
我最近的测试花了 45分钟来调用结果处理程序。
功能的作用并不重要。
如果我正在尝试更新我的数据库,则更新成功(无论字符串是否在该更新中使用),我的应用程序很长时间都没有得到结果;
如果cffunction没有,就像
< cffunction name =“myFunc”access =“remote”>
< ! - 什么都不做 - >
< / cffunction>
它仍然需要很长时间才能返回。
重复测试对服务器有明显影响; CF开始吃掉处理器和内存,尽管它最终会恢复。
将字符串IN作为参数传递是关键;如果我从数据库中检索字符串,则没有问题。
这些字符串可能代表非常大的数字。如果我试图进行任何计算或其他操作,我可能会理解这一点。但正如我所说,该函数根本不需要做任何事情,只是字符串的存在会导致问题。 (我已经验证它是作为String传递的,而不是int,Number,float,decimal等)
提醒我此问题的字符串源自用户。它是某种目录号。他们有许多不同的字母/数字组合;这个碰巧使用了一个'E'。我不能简单地“禁止”这种性质的弦。
任何人对于为什么会发生这种情况有任何想法,更重要的是,目前我如何避免这种情况?延迟45分钟='冻结应用'给用户。