2012-05-02 23 views
0

私は実行に時間がかかる複雑な動作があります。長いリクエストではレンダリングされませんが、コントローラコードがエクスポーズされました

データの小さなサブセットに対して実行すると、完全に動作し、必要なページが生成されます。

大量のデータを扱う場合、処理時間が数分を超えると、依然としてクライアントマシン上でページが要求されているように見えますが、スタックトレースを使用して、 "戻るビュー(モデル);"

これはなぜ起こっているのでしょうか?私は完全に迷っています。私は数時間(appプールのために利用可能なものを含む)にタイムアウトごとにtrieadを拡張しました。

これはChrome、IE、Safari、Firefoxのいくつかの異なるPCで試されているため、ブラウザの問題にはなりません。

EDIT

これは全く異なる事が起こっているアプリケーション内の複数の場所で起こります。しかし、すべてのコードは両方のために実行されます。

+0

OutOfMmeory excepetionが大きすぎますか?それとも、サーバー側で例外が発生するのでしょうか? (すなわち、 "My Code Only"をデバッグしてオフにし、CLR例外のためにスローするときにExceptions-> breakを回す)。 –

+0

例外はありません:( – rashleighp

+0

エラーはありません(つまり、エラー404 ...またはエラー500)がブラウザに表示されますか...この質問にはちょうど答えましたが、無視してください – twaldron

答えて

2

View(モデル)を呼び出す前に、モデルには実際にすべてのデータが含まれていますか?

IQuerableまたはIEnumerableプロパティでToList()を呼び出すと、期待されるデータが返されますか?

さらに進んでいくにはもう少しコードを投稿する必要があります。


編集:まだ

ない上に行くために十分な情報が、ここではさらにいくつかのデバッグのヒントです。

あなたのパスはブラウザです - あなたはすべてのデータがモデルオブジェクトにマテリアライズされていることを見る(モデル)を呼び出す前に、あなたがいることを想定することができると確信している場合>データベース

- > Webサーバ問題はwebserver - >データベース接続にありません。

だから、問題はブラウザの間にある場合 - >ウェブサーバー、ここではカップルより多くの可能性あり:

  • あなたは大企業のシステムを言及:すべてのプロキシが関与がありますか?直接接続でテストできますか?

  • ブラウザには何も返されていませんか? Webサーバーのポート80にTelnetで接続してリクエストを発行できますか?何か戻ってきますか?

  • ブラウザのプロセスを監視している場合は、何もしていますか? procexpを使用すると、各スレッドが何をしているかを見ることができます。ブラウザがアイドル状態になっているか、CPUを使用していますか?&

  • リクエストを傍受している他のプロセスはありますか?アンチウイルス製品の中には、特定のページのレンダリングを妨げるものがあります。アンチウイルスを無効にして、何か変更があるかどうか確認できますか?

  • あなたは何が起こっているかを見るためにサーバーを監視しようとしましたか?処理が行われていますか(おそらくメモリ使用量も上がります)。

+0

+1ステップ2:新しいEmptyResult();を返すことで、問題が解決できるかどうかを確認することをお勧めします。 –

+0

すべてが正しく返されます。レースは非常に異なるコードで実行され、リクエストに時間がかかる場合にのみ発生します(要求に数分かかります)。私はすでにコードの問題を探して3日間過ごしましたが、確かに問題はありません。 – rashleighp

+0

ありがとうございます、あなたの提案は本当に助けになりました。最終的には、とにかくhttpsに移動しました(とにかく、いつかやっていました)、別のポートを使ってうまく動作します! – rashleighp

0

IISに処理のタイムアウトがあります。それに達すると、リクエストが処理パイプラインのどの段階にあっても、処理スレッドは終了する。 web.configファイルで指定された処理のタイムアウトを増やしてみてください:

<httpRuntime executionTimeout="90" /> 

詳細はMSDNを参照してください。この制限はすべてのページに適用されるので、このルートを下った場合は注意が必要です。

+0

アイドルタイムアウトを意味しますか? IISヘルプまたはWeb上の処理タイムアウトに関する他の参照を見つけてください。すでに2時間に設定されています(問題は8分後に発生します)。 – rashleighp

+0

既に14400(4時間)に設定されています – rashleighp

1

あなたは全く異なる設計を検討するかもしれない:

  1. クライアントがサーバーにジョブを送信
  2. Serverが長時間実行操作のバックグラウンド処理
  3. サーバー、クライアントにジョブIDを返します
  4. クライアントがジョブを使用して起動しますジョブステータスがサーバーに定期的に問い合わせるID
  5. ジョブが完了すると、クライアントは結果をHTMLまたはデータ(JSONなど)として要求し、次にレンダリングします赤。
+0

これはいいアイデアだと思っていますが、これまで同様のことを話しましたが、これは大規模な生きているエンタープライズシステムなので、時間と労力がかかります(そして危機的な状態です)。 – rashleighp

0

私はあなたのコード私の推測は、非同期コントローラ(と、かどうかを試してみて、使用することですを見ていないものの、要求はAjaxの:-)を経由して以来行われて、明らかに、長時間実行されますあなたは時間を短縮するためにいくつかの並列処理で処理を最適化することもできます。 http://msdn.microsoft.com/en-us/library/ee728598.aspx

関連する問題