呼び出しが2〜3時間の処理をトリガーするように、呼び出される必要があるWCFサービスがあります。Windows C#クライアントアプリケーションを使用してサービスを呼び出し、タイムアウトをすべての最大値に設定しました。これをWindowsAzureに展開すると、クライアントによってトリガーされたWCFプロセスが一定時間後に停止したように見えます。クライアントはタイムアウト例外を取得しません。Azureワーカーの役割を使用できますが、複雑な操作であるため、WCFコードのみを使用してプロセスを完了できます。つまり、データベースに対して単純な編集/挿入操作を実行するワーカーロールをスケジュールするだけでは不十分です。だから私は鶏が先か卵が先かという問題を抱えています。バックグラウンドプロセスでは、バックグラウンド操作を実行するためにWCFコードが必要ですが、Azureで一定時間経過するとWCFが停止するようです。
質問する
555 次
2 に答える
2
これは、ロードバランサーが原因です。タイムアウトは以前は60秒でしたが、数か月前には「60秒以上」に延長されました(同時接続によって異なります)。とにかく、タイムアウトを回避するために接続を維持する必要があります。
これをWCFクライアント/サービスに実装してみることをお勧めします:WCF Azure Net.TCP Keep Alive
アーキテクチャを考え直してみませんか?接続(何らかの理由で切断される可能性がある)に依存する代わりに、クライアントにメッセージをキューにドロップさせるだけではどうでしょうか。ワーカーロールはキューからメッセージを取得し、2〜3時間の処理を実行し、処理が完了すると、メッセージを別のキューにドロップします。最後に、クライアントは他のキューをポーリングし、そこにメッセージが到着すると、プロセスが完了したことを認識します。
于 2012-09-13T14:29:50.393 に答える
0
長時間実行する操作に必要なコードを別のプロジェクトに配置できます。次に、このプロジェクトをWCFソリューションとワーカーロールソリューションに含めることができます。
バックグラウンドプロセスには、操作を完了するために必要なすべての機能が含まれます。
于 2012-09-13T14:05:51.123 に答える