2013-01-09 19 views
6

私はサードパーティのexeを使用してリクエストを処理するasp.netのウェブサイトを持っています。現在、私のワークフローはAsp.Net - 外部アプリケーションへの処理をオフロード

  1. ユーザーが任意のブラウザを使用してWebサイトにアクセスし、ジョブの詳細をフォームに記入

  2. ウェブサイトはポート

  3. Windows上で待機しているWCFのセルフホストされているWindowsサービスを呼び出していますサービスはサードパーティのexeを起動してジョブを処理し、結果をウェブサイトに返します

  4. ウェブサイトは返された結果をユーザーに表示します

上記のウェブサイトは、今すぐプロダクションの準備ができている必要があります。私は、上記のアーキテクチャには壊れる可能性のある多くの点があることを認識しています。たとえば、マシンの電源がオフになっている場合や、Windowsサービスがクラッシュしてもポートで待機していない場合は、現在のすべてのリクエストが処理を停止します。アーキテクチャは、より堅牢にするために、私は次の

  1. ユーザーが任意のブラウザを使用してWebサイトにアクセスし、

  2. ウェブサイトは、データベースへのジョブの詳細を書き出しジョブの詳細をフォームに記入検討しています

  3. 新しいジョブのためにデータベースを10秒ごとにポーリングするWindowsサービスは、ジョブを取得し、サードパーティアプリケーションを使用してジョブを実行します。結果はデー​​タベースに書き戻されます。

  4. データベースのポーリングを開始したWebサイトでは、結果を取得してユーザーに表示します。

2番目のアーキテクチャでは、より多くのロギング機能が提供され、ジョブがキューに入っていればジョブを再開できます。ただし、スケーラビリティに欠ける多量のポーリングが必要です。誰もより良いアーキテクチャをお勧めできますか?

+0

同様の種類の要件でPOCを実行しましたが、手順2でMSMQを考慮しましたが、プロジェクトに実装しませんでした。この興味深い実装に関する回答を楽しみにしています。 – Sunny

+0

@Sundeep - MSMQの代替案は、あなたのプロジェクトにどのように使用されましたか?プロジェクトが完了したか、それともまだ進行中ですか?ありがとうございました –

+0

これは長年前のことでしたが、アプリケーションはバックエンドの処理を行い、通知メールをユーザーに送信します。だから、即座に処理するためにそれを置き換えることを望んでいた。 – Sunny

答えて

0

の代わりに、私はMSMQまたはRabbitMQとなるだろうポーリングを実行します。

こうすることで、キューの複数のコンシューマ(おそらくWebサーバーとは別のサーバー)に負荷をかけずに、より多くの要求を並列処理できます。

+0

これは今のところ最良の選択肢のようです。他の人はMSMQも提案していますが、私は1つの答えしか受け入れられません。私はこれを答えとして受け入れます。なぜなら、この方法をポーリングで選択する理由があるからです。 –

0

私は、ユーザーが複数のリクエストを処理するアプリケーションで同じアーキテクチャを実装しています。だから私は持っている - 要求

  • 要求は、ユーザー名など
  • +すべての詳細をデータベーステーブルに格納されて送信など

    1. ユーザー後藤ウェブサイトおよび選択パラメータをサービスでは、データベースのテーブルを見て、ピックアップFIFO形式での要求
    2. 要求が処理された後、ステータスは、その要求IDに対してデータベーステーブルに失敗または完了したものとして更新されます。これはWebサイトのユーザが見ることができます
    3. サービスは、そうでなければ停止する。
    4. サービスは、すべて30分
  • +0

    30分ごとにリクエストを受け取るという贅沢があったら、私はこの方法を使いました。しかし、私の現在のアプリケーションでは、応答はリアルタイムである必要があり、大量(毎時200件以上のリクエスト)の可能性があります。 –

    関連する問題