6

SQL DBからデータをプルし、レコードをループして文字列を生成するコードがあります。文字列は最終的にテキストファイルに書き込まれます。

コードはVSからのローカルでは正常に実行されますが、ライブサーバーでは、約1分半後に「データが受信されませんでした」エラー(chrome)が発生します。コードは、DataTableをループする途中で停止します。ホスティングサポートは、「接続がリセットされました」エラーがスローされたと述べました。

これがタイムアウトの問題なのか、それとも何なのかわかりません。web.configでexecutionTimeoutを設定しましたが(debug = false)、役に立たなかったようです。Server.ScriptTimeoutプロパティも確認しました。これは、web.configで設定されたexecutionTimeout値と一致します。さらに、タイムアウトは通常、「ページが利用できません」というメッセージを表示します。

任意の提案をいただければ幸いです。

4

4 に答える 4

6

約1分半後

あなたの問題があります。これはWebアプリケーションですか?1分半は、Webアプリケーションが要求に応答するのに非常に長い時間です。ある種の仕事にするためにさまざまなトリックに従事する価値がないほど長い。

このプロセスをオフロードして、Webアプリケーション自体との非同期性を高める必要があります。Webアプリケーションの性質は、要求を受信し、タイムリーに応答する必要があるということです。ここにあるのは、タイムリーに応答できない長期的なプロセスです。Webアプリケーションはデータとの対話を容易にすることができますが、要求/応答でデータの処理を直接処理するべきではありません。

Webアプリケーションはプロセスとどのように相互作用しますか?それはそれを開始するだけですか、それともプロセスを開始するための情報を提供しますか?プロセス自体は、Windowsサービスやコンソールアプリケーションなどで処理することをお勧めします。Webアプリケーションから切り離されているほど、優れています。今、私はプロセス自体について何も知らないので、私はその振る舞いについていくつかの仮定をしています...

Webアプリケーションは、プロセスに必要な情報とともに、プロセスを開始するための要求を受け取ることができます。これをステータス値(保留中、キューなど)でデータベースに保存し、要求が受信されてプロセスがキューに入れられたことをユーザーに(タイムリーに)応答できます。Webアプリケーションには、ステータスをチェックするページを含めることができるため、ユーザーはプロセスがどのように実行されているか(開始されている場合、通過したレコードの数など)を確認できます。

オフラインアプリケーション(Windowsサービスなど)は、処理される新しくキューに入れられたデータについてそのデータベースを監視するだけです。それを見ると、ステータス(実行中、処理中など)を更新し、そのデータを更新することで、プロセス中に関連するフィードバック(処理されたレコードの数など)を提供します。したがって、オフラインアプリケーションとWebアプリケーションはどちらも同じデータと対話していますが、Webアプリケーションのスレッドをブロックし、ユーザーへの応答を妨げるような方法ではありません。

プロセスが終了すると、ステータスが再度更新されます。Webアプリケーションは、終了したことを示し、結果をダウンロードするためのリンクを提供できます。オフラインプロセスは、完了時にユーザーに電子メールを送信することもできます。あるいは、Webアプリケーションに、ユーザーに新しいアクティビティを警告する何らかの通知システム(Facebookの小さな通知アイコンを描いています)を含めることもできます。

このようにして、スレッドがブロックされることはなく、ユーザーはアプリケーションとの対話を継続できます(対話するものがあれば)など。また、他の追加の利点も得られます。たとえば、プロセスの結果はデー​​タベースに保存され、自動的に履歴が追跡されます。

于 2012-07-02T17:43:05.880 に答える
3

サーバーではなく、応答を待ってタイムアウトしているのはブラウザのようです。ブラウザがこれに設定したものを制御することはできません。あなたができることは、ブラウザにある種の応答を送信することです。これにより、ブラウザは、あなたがまだ周りにいて、何らかの方法でクラッシュしていないことを認識します。

これが機能するためには、文字列全体の構築が完了するまで待つことはできません。文字列に追加する代わりに、出力ストリームに各追加を書き込むように、コードを再考する必要があります。これには、テキストファイルを作成するためのはるかに効率的な方法であるという追加の利点があります。ブラウザを存続させる目的で、ブラウザが読み取るためにデータが戻ってくる限り、何でも書き出すことができます。HTMLコメントはこれに有効です。また、応答ストリームを定期的にフラッシュして、データがWebサーバーにバッファリングされないようにする必要があります。そうしないと、タイムアウトする可能性があります。

もちろん、ここでの本当の解決策は、最初から操作に90秒以上かかることがないように設計を再考することです。しかし、それができるまでは、これが役立つことを願っています。

于 2012-07-02T18:09:48.037 に答える
0

タイムアウトのように聞こえますが、ビューを介して情報を返してみてください。これにより、確実に処理速度が向上します(可能な場合)。

于 2012-07-02T17:38:57.393 に答える
0

このエラーが発生したとき、Web.configファイルに追加することで解決できました。

<system.web>
    <httpRuntime executionTimeout="600" maxRequestLength="51200"  />
</system.web>
于 2015-07-17T20:49:39.850 に答える