1

基本的に、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 呼び出しがスレッド化されてまったく新しいコンテキスト内で実行されるときに何か関係があると想定しているため、管理者の要求タイムアウト値しか確認できません。しかし、私はちょうど推測しています。

誰かがここで解決策を見つけるのを手伝ってくれますか? 管理者からタイムアウト値を削除することもできますが、それを維持し、明示的にそう言った場合にのみ上書きすることをはるかに好むので、そうする必要は本当にありません。

4

1 に答える 1

0

私はこれについて個人的な経験はありませんが、いくつかの検索の後、コードはタグ<cfsetting requesttimeout="">によって尊重されていないようです. <cfthread>私が見つけた次の参照を参照してください。

ColdFusion 管理者でリクエストのタイムアウト設定を無効にするなど、詳細に説明されている変更を行うことをお勧めしているわけではないことに注意してください。それは良い考えだとは思いません。 私が見つけたこの情報を伝えているだけです。要点は、タグがオプション<cfthread>をサポートしていないことです。<cfsetting requesttimeout="">そのため、必要なことを行う別の方法を見つけるか、設定されたタイムアウト前にコードを最適化する必要があります。

coldfusion での cfthread とリクエストのタイムアウト

その過程で、いくつかのテストと遊んだ後、次のことがわかりました。

  1. CFthread は基本的に、CF 管理パネルのタイムアウトが設定されている場合はそれを尊重し、タイムアウト期間後にスレッドを強制終了します。
  2. onRequestStart またはコード内の任意の場所で CFsetting タグを使用して設定された要求タイムアウトは考慮されません。
  3. CFthread 要求のタイムアウトに従わない特定のタグがまだあります。それらは、CFFTP、CFEXECUTE、CFX タグ、および CFStoredProc です。

CFML のスレッドの要求タイムアウトを増やす

ご覧のとおり<cfsetting requestTimeout=240 />、スレッドの先頭に a を追加して、スレッドを長持ちさせようとしました...サイコロはありません。

このソリューションで <cfthread> を正しく利用していますか?

スレッドのタイムアウトについては、作成したスレッドがページの実行に再参加するまで待機する最大時間を指定できますが、作成したスレッドにタイムアウト (ページ要求のタイムアウトなど) を設定する方法はありません。

また、Charlie Arehart には、一般的な ColdFusion リクエスト タイムアウトに関する非常に優れた記事があります - CF911: Lies, Damned Lies, and CF Request Timeouts...What You May Not Realize

于 2013-07-19T12:24:13.420 に答える