【发布时间】:2013-07-19 21:11:52
【问题描述】:
基本上,我有一个作业调度引擎,它从 cfthread 标记内执行 cfhttp 调用。这样多个作业可以同时运行。基本上我想要做的是将超时期限延长到管理员对我的一些 cfhttp 调用的默认值之外,这样我就可以让它们完成并从我正在调用的页面中获取结果。但这并没有发生。
我的 CF 管理员请求超时设置为 30 秒。我有两个文件。第一个称为“MyThreadedCFHTTP.cfm”:
<cfthread action="run" name="job_#CreateUUID()#">
<cfsetting requesttimeout="400" >
<cflog text="Web Service Request: Starting" file="JobSchedulerTest" >
<!--- Lets do our cfhttp call --->
<cfset var httpResults = ""/>
<cfhttp method="get" url="http://localhost:8500/sessiontesting/CFHTTPRequestTimeOut/GetResults.cfm?RequestTime=400" result="httpResults" timeout="400">
<cflog text="Web Service Result: #httpResults.FileContent#" file="JobSchedulerTest" >
</cfthread>**strong text**
我调用的 cfm 文件是“GetResults.cfm”。它只会在做任何事情之前休眠 59 秒。
<cfsetting requesttimeout="400"/>
<cfset sleep(59000)/>
这没有按预期工作。 cfhttp 调用,虽然它的超时时间为 400 秒,并且我在它之前有一个 cfsetting/requesttimeout 值,但它会在 30 秒后中止并显示连接超时消息。这是服务器的默认设置。现在有趣的是,如果您删除标签,调用将成功完成。
我假设当 cfhttp 调用在某个全新的上下文中线程执行时,这有一些事情要做,因此它只能看到管理员的请求超时值。但我只是猜测。
有人可以帮我在这里找到解决方案吗?我可以从管理员那里删除超时值,但我真的不想这样做,因为我更愿意保留它,并且只有在我明确表示时才覆盖它。
【问题讨论】:
-
您尝试使用 cfhttp 获取的页面可能是超时的页面。但我猜。
-
@Dan,我调用的文件是“GetResults.cfm”页面,其代码为:
。此页面不会超时,因为我在该文件中设置了 requesttimeout 值。奇怪的是,如果我删除上面代码周围的“cfthread”标签并调用页面,一切都会按预期运行,没有超时。