基本的に、cfthread タグ内から cfhttp 呼び出しを実行するジョブ スケジューリング エンジンがあります。これは、複数のジョブを同時に実行できるようにするためです。基本的に私ができるようにしたいのは、一部の cfhttp 呼び出しで管理者のデフォルトを超えてタイムアウト期間を延長して、それらを終了させ、呼び出しているページから結果を取得できるようにすることです。しかし、それは起こっていません。
私の CF 管理要求タイムアウト設定は 30 秒です。私は2つのファイルを持っています。1 つ目は「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 秒後に Connection Timeout メッセージで中止されます。これはサーバーのデフォルト設定です。興味深いのは、タグを削除すると、通話が正常に終了することです。
これは、cfhttp 呼び出しがスレッド化されてまったく新しいコンテキスト内で実行されるときに何か関係があると想定しているため、管理者の要求タイムアウト値しか確認できません。しかし、私はちょうど推測しています。
誰かがここで解決策を見つけるのを手伝ってくれますか? 管理者からタイムアウト値を削除することもできますが、それを維持し、明示的にそう言った場合にのみ上書きすることをはるかに好むので、そうする必要は本当にありません。