CFTHREAD CFHTTP超时

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

有人可以帮助我在这里找到解决方案。 我可以从管理员中删除超时值,但是我真的很讨厌必须这样做,因为我可能会更愿意保留这一点,并且只有在明确地说出这一点时才会覆盖它。


我对此没有任何亲身经历,但经过一番搜索之后,似乎<cfsetting requesttimeout="">代码不符合<cfthread>标记。 请参阅我找到的以下参考资料。

请注意,我并不是建议您进行更详细的更改,例如在ColdFusion管理员中禁用请求超时设置。 我不认为这是一个好主意。 我只是传递了我发现的这些信息。 要点是<cfthread>标签不支持<cfsetting requesttimeout="">选项。 因此,您可能需要找到另一种方法来执行所需的操作或优化代码以在设置的超时之前完成。

Coldfusion中的cfthread和请求超时

在这个过程中,我经过一些测试和玩耍后发现了以下内容:

  • CFthread基本上尊重CF管理员面板超时(如果已设置并在超时期限后终止线程)。
  • 它不考虑使用onRequestStart中的CFsetting标记或代码中的任何位置设置的请求超时。
  • 仍然有某些标签不遵守CFthread请求超时,它们是CFFTP,CFEXECUTE,CFX标签和CFStoredProc。
  • 增加CFML中线程的请求超时

    正如你所看到的,我已经尝试在线程的顶部添加一个<cfsetting requestTimeout=240 />来尝试使它活得更久......没有骰子。

    我是否正确利用<cfthread>来解决此问题?

    至于线程超时 - 您可以指定最大时间来等待您创建的线程重新加入页面执行,但AFAIK无法在您创建的线程上放置超时(如页面请求超时)。

    Charlie Arehart在ColdFusion请求超时方面有一篇相当不错的文章 - CF911:谎言,诅咒谎言和CF请求超时......你可能没有意识到的东西

    链接地址: http://www.djcxy.com/p/31237.html

    上一篇: CFTHREAD CFHTTP timeout

    下一篇: ColdFusion 9's ODBC Socket Datasource issue on Tomcat 7