2013-07-18 30 views
1

基本上,我有一個從cfthread標籤內執行CFHTTP呼叫的作業調度引擎。這樣可以同時運行多個作業。基本上我希望能夠做的是延長超出管理員的默認值是在我的一些cfhttp調用,以便我可以讓他們完成並從我打電話的頁面獲得結果。但這並沒有發生。CFTHREAD 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調用線程的一些全新的範疇內執行這樣做,所以它只能看到管理員的請求超時值。但我只是猜測。

有人可以幫助我在這裏圖個解決方案。我可以從管理員中刪除超時值,但是我真的很討厭必須這樣做,因爲我可能會更願意保留這一點,並且只有在明確地說出這一點時纔會覆蓋它。

+0

這有可能是你正在試圖獲得與CFHTTP的頁面是一個超時。但我猜。 –

+0

@Dan,我正在調用的文件是'GetResults.cfm'頁面,其代碼爲: 。這個頁面不會超時,因爲我在該文件中設置了requesttimeout值。奇怪的是,如果我在上面的代碼中刪除'cfthread'標籤並調用頁面,則所有內容都按預期運行,並且沒有超時。 – user2592724

回答

0

我對此沒有任何個人經驗,但經過一番搜索之後,似乎<cfsetting requesttimeout="">代碼沒有被<cfthread>標記兌現。請參閱我找到的以下參考資料。

注意,我不建議您進行更改,他們詳細就像禁止在ColdFusion管理員請求超時設置。我不認爲這是一個好主意。我只是傳遞了我發現的這些信息。要點是<cfthread>標籤不支持<cfsetting requesttimeout="">選項。因此,您可能需要找到另一種方法來執行所需的操作,或者優化代碼以在設置的超時之前完成。

cfthread and request timeout in coldfusion

在這個過程中,我發現了一些測試後,下面和玩耍:

  1. 的CFthread基本上如果它被設置尊重CF管理面板超時和超時後殺死線程期。
  2. 它不尊重請求超時使用onRequestStart的CFsetting標籤或代碼中的任何地方設置。
  3. 仍然有某些標籤不遵守CFthread請求超時,它們是CFFTP,CFEXECUTE,CFX標籤和CFStoredProc。

Increase request timeout for a thread in CFML

正如你所看到的,我已經嘗試添加一個<cfsetting requestTimeout=240 />到線程的頂部,試圖使其壽命更長...沒有骰子。

Am I utilizing <cfthread> correctly for this solution?

至於線程超時 - 你可以指定一個最大時間等待線程創建歸隊頁面執行,但據我所知是沒有辦法把超時(如頁面請求超時)在您創建的線程上。

和查理Arehart對ColdFusion的要求相當不錯的文章超時一般 - CF911: Lies, Damned Lies, and CF Request Timeouts...What You May Not Realize

+0

@ Miquel-F,完全聽到你,但我已經做到了。如果您在啓動cfthread標記之後立即查看該行,您會看到我已將requesttimeout設置爲400.如果在cfthread標記之前或之後放置該,則無關緊要,相同的結果,這是cfhttp超時。其他想法? – user2592724

+0

@ user2592724 - 但這就是我正在努力做到的一點......並且這只是基於搜索,我沒有任何親身體驗。 ''標籤忽略了'標籤。它總是基於ColdFusion管理員的設置超時。 –

+0

我的迴應是,你的代碼需要在呼叫模板中進行,這是發起cfhttp調用的第一篇文章;在你的例子中MyThreadedCFHTTP.cfm。不在被調用的頁面中。'。你更新的一個很有意義。它很有趣,因爲cfthread只要需要就會運行。它的基於管理設置超時的cfhttp標籤。我想我可能需要按照第一個鏈接中的建議。感謝您查看這個。 – user2592724