C# の .NET 3.5 Web サイトで、ユーザーが Web ページの [送信] をクリックすると、電子メール アドレスでレポートに登録されます。残念ながら、このアクションには約 5 分かかり、ユーザーは座って確認を待つ必要があります。私がしたいのは、サブミットをクリックすると、サブスクリプションが完了すると電子メールで通知されるというポップアップが表示されるように変更することです。その間、サーバー上の別の場所でサブスクライブアクションをキューに入れます。 Web コードには存在しません。これを行う方法をいくつか教えてください。基本的な考え方は、2 つの異なる実行行に分割して、1 つは引き続き Web サイトを閲覧できるようにし、もう 1 つは購読を許可するというものです。私は新しいスレッドに分割することを考えていましたが、Web コードはそのスレッドが終了するまで待ってから、他のことを行う必要があると思います。できれば同じサーバーで実行できるアイデアを探しています。ありがとう!
3 に答える
多くのオプションがありますが、基本的なアプローチは、サイトをプロバイダーから切り離すことです。代わりに、「ユーザー X は購読を待っています」というレコードを書き出すと、別のプロセスがレコードを読み取り、実際の購読を実行し、レコードを「進行中」としてマークします。プロセスが完了すると、記録は完了した情報で再び更新されます。
これは、データベース、メッセージ キュー、またはその他の方法で実現できます。しかし基本的に、サイトはレコードの作成とそのステータスの確認のみを担当します。プロバイダーとの実際のやり取りは個別に処理されます。
これだけ時間がかかるものを真にしてアクションが確実に実行されるようにしたい場合は、それをキューに入れるのが最善の策です。
基本的に、彼らがリクエストを送信すると、それをデータベース テーブルに保存して先に進めます。その間、そのテーブルを監視してリクエストを処理する別のプロセスを用意します。彼らが入ってきたら、この 2 番目のプロセスで、完了までに 5 分かかる部分にリクエストを送信するだけです。
終了したら、「これこれのメーリング リストへようこそ」というメッセージを送信します。それは、それが機能したことの確認として役立ちます。
Jeff Atwood は、関連するトピックについてブログを書いています。あなたは c# を使用しているので、ASP.NET を使用しており、キャッシュ メカニズムを利用して定期的なワーカー ジョブを開始できると思います。ユーザーの要求に応じて、サブスクリプションの詳細をデータ ストアに保存できます。そのジョブでは、キューを調べて、どのサブスクリプションを作成する必要があるかを判断し、それらを実行できます。
https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/