3

コードビハインドに長時間実行される (リソースを大量に消費する) プロセスを持つ Web アプリケーションがあり、最終的な出力は PDF ファイル (画像から PDF への変換ツール) です。

それは問題なく動作します..そして、私は専用サーバーにいるので、現在リソースに関してはまったく問題ありません.

ただし、一度に処理するユーザーが 20 人を超えると、システムがリソースの限界に達するのではないかと思います。

ユーザーが電子メールを入力すると、プロセスがバックグラウンドでキューに入れられ、結果が先入れ先出し方式で電子メールで送信されるサービスをオンラインで見たことがあります。

C#を使用してasp.netアプリケーションにこの種のロジックを実装する方法を教えてください。

4

4 に答える 4

5

このようなシステムは、サーバー上で実行される Windows サービスで構成されます。asp.net ページが行う唯一のことは、(関連するデータを含む) 要求をデータベースに送信することです。次に、Windows サービスはこのテーブルを監視し、すべての新しい要求を処理します。

于 2010-05-12T13:16:40.000 に答える
0

Klaus が正しく指摘したように、Windows サービスを使用して実装する必要があります
。彼の回答の補遺:
(i) 長時間実行されるプロセスを複数のタスクに分割します
(ii) 各タスクについて、個別のコンソール アプリケーションを作成し、applicationId を使用して各アプリを識別します。

enum ApplicationId:byte
{
  Router = 1,
  Task1 =  2,
  Task2 =  3,
  Task3 =  4,
  Task4 =  5,
  Email = 6
}

(iii) 1 つのアプリケーションをルーターとして呼び出します。あるアプリケーションから別のアプリケーションにトランザクションを移動します。
(iv) transactionId、nextAppId およびその他の関連フィールドを含むテーブルを作成します
(v) タスクの完了後、テーブルの nextAppId を更新します
(vi) Windows タスク スケジューラですべてのアプリをスケジュールするか、アクティブなバッチ サーバーを使用します (商業的に)
(vii )最後のアプリケーション「電子メール」は、生成されたpdfを添付ファイルとしてユーザーに電子メールで送信します

これが答えることを願っています!!!!. 良い1日を!!!

于 2014-09-21T08:45:45.643 に答える
0

同時リクエストの数を調整したい。変換プロセスを処理する別のアプリケーションを作成できます。Windows サービスまたは定期的に実行されるスケジュールされたタスクのいずれか。

  1. 要求をキュー (データベース テーブルまたはMSMQ ) に記録します。プログラムで何かが発生した場合に備えて、何らかのキューにログを記録する必要があります。プロセスを非同期で処理するため、ユーザーはファイルを受信しないだけでなく、何か問題が発生したかどうかを知ることはできません。このようにして、何かが発生した場合にプロセスを再起動して処理を続行できます。
  2. 外部アプリケーションでキューを監視し、要求を 1 つずつ処理します。
  3. プロセスが終了したら、プロセスが完了したことをユーザーに通知し、Web サイトでダウンロードするか、PDF をユーザーに電子メールで送信します。

外部プログラムで変換を処理することの優れた点は、プログラムを複数のマシンにロードしてリクエストをより高速に処理できることです。また、Web サイトの処理に使用される Web サーバーやアプリ サーバーの速度を低下させる必要もありません。

于 2010-05-12T13:19:24.037 に答える