Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coldfusion CFHTTP线程超时_Coldfusion_Coldfusion 9 - Fatal编程技术网

Coldfusion CFHTTP线程超时

Coldfusion CFHTTP线程超时,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,基本上,我有一个作业调度引擎,它在cfthread标记中执行cfhttp调用。这样多个作业可以同时运行。基本上,我希望能够做的是将超时时间延长到管理员对我的一些cfhttp调用的默认值之外,这样我就可以让它们完成并从我调用的页面获取结果。但事实并非如此 我的CF管理员请求超时设置为30秒。我有两个文件。第一个称为“MyThreadedCFHTTP.cfm”: <cfthread action="run" name="job_#CreateUUID()#"> <cfset

基本上,我有一个作业调度引擎,它在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调用在某个全新的上下文中执行时,这与此有关,因此它只能看到管理员的请求超时值。但我只是在猜测


有人能帮我想出一个解决办法吗。我可以从管理员那里删除超时值,但我真的不愿意这样做,因为我更愿意保留超时值,并且只在我明确表示时才覆盖超时值。

我对此没有任何个人经验,但经过一些搜索后,代码似乎不受标记的尊重。请参阅我找到的以下参考资料

请注意,我并不是建议您进行更改,如在ColdFusion administrator中禁用请求超时设置。我认为那不是个好主意。我只是传递我发现的这些信息。要点是标记不支持该选项。因此,您可能需要找到另一种方法来完成所需的工作,或者优化代码以在设置的超时之前完成

在这个过程中,经过一些测试和尝试,我发现了以下几点:

如果设置了CF管理面板超时并在超时后终止线程,则CFthread基本上尊重该超时。 它不尊重使用onRequestStart或代码中任何地方的CFsetting标记设置的请求超时。 仍有某些标记不遵守CFthread请求超时,它们是CFFTP、CFEXECUTE、CFX标记和CFStoredProc。 正如你所看到的,我已经尝试在线程的顶部添加一个,以使其寿命更长。。。没有骰子

至于线程超时-您可以指定等待创建的线程重新加入页面执行的最长时间,但恐怕无法在创建的线程上设置页面请求超时这样的超时


Charlie Arehart有一篇关于ColdFusion请求超时的非常好的文章-

您尝试使用cfhttp获取的页面可能是超时页面。但是我猜。@Dan,我调用的文件是“GetResults.cfm”页面,其代码为:。此页面没有超时,因为我在该文件中设置了requesttimeout值。奇怪的是,如果我删除上面代码周围的“cfthread”标记并调用页面,所有内容都会按预期运行,没有超时。@Miquel-F,完全听到了,但我已经这么做了。如果您查看启动cfthread标记后面的行,您将看到我已将requesttimeout设置为400。不管我把它放在cfthread标记之前还是之后,我都会得到相同的结果,即cfhttp超时。其他想法?@user2592724-但这正是我想表达的观点。。。同样,这只是基于搜索,我没有任何个人经验。标记将忽略该标记。它将根据ColdFusion管理员中的设置始终超时。我的回答是您的第一篇帖子“您的代码需要进入调用模板,即进行cfhttp调用的模板;在您的示例中,MyThreadedCFHTTP.cfm。不在正在调用的页面中。“”。你的更新版很有意义。这很有趣,因为cfthread将运行所需的时间。它是根据管理员设置超时的cfhttp标记。我想我可能需要遵循第一个链接中的建议。谢谢你调查这件事。哦,对了。起初我答错了。重新阅读代码后,我看到您正在执行我提到的操作。然后我开始搜索并找到上面的信息,所以我更新了我的答案。在管理员中禁用超时设置时要小心,否则我会犹豫是否要这样做。