2

webHttpBindingでWCF Webサービスを開発しています。クライアントアプリケーションはこのWCF Webサービスをオンデマンド(HTTP POST)またはスケジューラーウィンドウサービス(現在Quartz.netを使用)を呼び出しています。長時間実行WCF 504 GATEWAY_TIMEOUTエラー

各コールでは、10〜30分かかるタスクのリストが実行されます。 1分後に504 Gateway_Timeoutエラーが発生します。私はWCF Webサービスの制限を増やしてみましたが、まだエラーが発生しています。

<webHttpBinding> 
    <binding name="webHttpBindingWithJsonP" closeTimeout="00:30:00" openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" maxReceivedMessageSize="50000000" maxBufferSize="50000000" maxBufferPoolSize="50000000" crossDomainScriptAccessEnabled="true"/> 
    </webHttpBinding> 


<httpRuntime executionTimeout="1800" targetFramework="4.0"/> 

エラーに関係なく、タスクは常に完了します。 Web要求がタイムアウトしたときにWCFがまだ動作しているかどうかわかりません。タスクがより少ない時間、例えば半分の時間を必要とする場合、有効な結果を返す。

すべてのswitchvalueでトレースログを試してみましたが、traceviewerを使用して出力を監視しましたが、エラーは見つかりませんでした。

私の質問は、WebHttpBindingサービスとして設計する必要がありますか、別のタイプとして設計する必要がありますか?

+1

クライアントからの一方向呼び出しとして設定してから、クライアントに定期的にステータスを取得させるようにしてください。 – Tim

+0

@Tim、クライアントアプリではい、私はChromeのPostmanでWCFをテストするときにTask.Run()を使用してFire&amp; API呼び出しを実装しますが、エラーが発生します。 WCFのプロセスが、504が返された後もまだ実行されていることを確認するためのものです。 –

答えて

1

最初の呼び出しの一環としてステータスページを提供し、ユーザーがステータスページを確認して(繰り返し)、タスクが完了したかどうかを確認しましたか?

これにより、接続が短期間になるため、何もタイムアウトしないようになります。

+0

クライアントアプリケーションでは、Task.Run()を使用してFire&amp; APIコールを実装し、実行中のジョブステータスをログに記録し、x秒ごとに完了をチェックするようにします。ChromeのPostmanでWCFをテストする504エラー。私は、WCFのプロセスが、クライアント側に返された後に、まだ実行中であることを保証するために、 –

+0

完了が完了したかどうかを別のエンドポイントでチェックする方法を公開する必要があります。 WCF接続を開いたままにすると、このようなエラーが発生します。あなたが何らかの方法でコミュニケーションしていたら、それは動作させることができるかもしれませんが、データを送信しないで接続を開いておくのは長い時間ですので、数十分待つだけでは難しいでしょう。 – Guvante

+0

これはまさに私がやっていることで、さまざまなwcfのステータスをチェックしています。私の心配は最初のタスクの実装ですwcfは長時間接続を保持できません。どうすればそれを実行して完了させることができますか?私は一方通話に気をつけず、結果を忘れて、後でwcfのステータスを確認してください。 –

関連する問題