基本上我有一个作业调度引擎,它从 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 调用在某个全新的上下文中线程执行时,这有一些事情要做,因此它只能看到管理员的请求超时值。但我只是猜测。
有人可以帮我在这里找到解决方案。我可以从管理员那里删除超时值,但我真的很讨厌这样做,因为我更愿意保留它,并且只有在我明确表示时才覆盖它。