私は、いくつかのレガシー技術に基づいて構築されたカスタム ID カード プリンターのフロント エンドとして機能する MVC 3 Web アプリケーション (.NET Framework 4、IIS7) に取り組んでいます。詳細には入りませんが、[印刷] をクリックすると、Web アプリはカード情報を含む行をデータベースに書き込み、戻ります。次に、バックエンドのサービスが行を取得し、カードの実際の印刷を処理します。バックエンド サービスが完了すると、成功または失敗を示すステータス列で行が更新されます。
現在、アプリケーションは (jquery ajax を介して) データを POST し、行がデータベースに書き込まれると、コントローラーはユーザーに表示される成功を返します。私が説明したセットアップのため、サービスまたはカード プリンターに問題がある可能性があるため、これは実際に現実を反映している場合と反映していない場合があります。
サービスからの行への更新に基づいて、UI が更新を「待機」するか、成功または失敗するようにするという新しい要件があります。jquery ajax 呼び出しを介してクライアント側で非同期の方法で既にセットアップされており、フロントエンドでの処理については心配していません。私はSignalRなどを見て、この部分をカバーしました。
私が探しているのは、Web サーバー側で正しく処理する方法に関する情報 (解決策ではなく、リンクと記事) です。以前のリクエストから定期的にデータベースをポーリングしている間、着信リクエストをブロックして印刷したくありません。大まかに言うと、コントローラーと必要なバックグラウンド プロセスをセットアップするための最善の方法は何かを知りたいと思います。
- リクエストを受け入れ、行をデータベースに書き込みます
- バックグラウンド ポーリング プロセスをセットアップし、制御を ASP.net に戻します。
- 行が更新されるまで (またはタイムアウトに達するまで) データベースを頻繁にポーリングする
- クライアントに答えを返す
私はスレッディングの専門家ではありませんが、これが間違って行われると危険な領域にいることを十分に知っています. どんな助けでも大歓迎です。