2011-11-14 8 views
1

FTPサーバーからデータを取得してデータベースに格納するWebアプリケーションを作成する必要があります。 FTPサーバーのプールを担当するスレッドが存在し、新しいデータが見つかると、データがダウンロードされてサーバーに挿入されます。私はApplication_Startで新しいスレッドを作成することを考えていましたが、安全なソリューションかどうかはわかりません。誰かがより良い解決策を提案できますか?ASP.NET Mvc +スレッド

答えて

4

あなたのウェブサイトから直接この操作を行わないでください。これを行うためのWindowsサービスを作成します。

+0

行わこれに同意することはできませんどのように、それは良いアイデアではありません、なぜ彼は説明した(あなたがアプリケーションプールをダウンさせると、破損した状態でデータを残すかもしれない)、あなたはそれをしなければならない場合もっと。ウェブサイトやサービスでマルチスレッド処理をしないでください。オフロード処理! – Randolpho

1

なぜこれをMVCアプリケーションとして作成していますか? MVCは、Webサイトを構築する際の優れたフレームワークとアプローチですが、FTPサーバーをポーリングしてデータをSQLにプッシュするなど、長時間実行されるバックグラウンド・タスクには適していません。

MVCでこれを行わないのがよい理由は、MVCサイトは、有限の(そして、できれば非常に短い)期間を必要とする複数の着信要求を処理するために特別に構築されたIISでホストされていることです。 IISでホストされているプロセスが長時間実行されると、IISはプロセスを強制終了して再起動します。私は、多くの人が "バックグラウンドタスク"が完了する前にリセットを続けているときに、混乱して(そして動揺して)いるのを見ました。長時間実行されているタスクを長期間実行するようにIISを構成することはできますが、誤ったスレッドがデッドロックに陥ったり、ループでスタックして長時間実行し続ける状況を十分に隠す可能性があります。

このタスクでは、Windowsサービス(例:MSDNCodeProject)を作成することを強くお勧めします。サービスはバックグラウンドで実行され、自動的に再起動され(クラッシュの場合)、手動/プログラムによる停止、開始、一時停止が可能です。これらはすべて、あなたが説明する種類の要件の重要な機能です。