2

特定の日付が発生したとき、またはいくつかのビジネス条件が満たされたときに、自動電子メールを送信する機能が必要です。このシステムは、既存のASP.NETWebサイトで動作するようにセットアップしています。私はここで他の開発者の1人とチャットし、いくつかの問題について話し合いました。

注意事項:

  • 必要なすべての情報は、ASP.NETWebサイトで既にモデル化されています
  • すでにウェブサイトにある電子メールの生成に必要ないくつかのビジネスロジックがあります

理想的な解決策は、夜間に実行され、処理と電子メール送信を行うようにスケジュールされた別の実行可能ファイルを用意することであると判断しました。このソリューションには2つの主な問題があります。

  • Webサイトが更新された(ビジネスロジックまたはモデル)が、実行可能ファイルが誤って失われた場合、実行可能ファイルは電子メールの送信を停止する可能性があり、さらに悪いことに、古いロジックに基づいて電子メールを送信する可能性があります。
  • このようなものを使用して、UserControlsを使用して電子メールをテンプレート化することを望んでいます。これは、ASP.NETWebサイトの外部では不可能だと思います。

最初の問題は、ビルドおよびデプロイメントスクリプト(とにかく現在調査中です)で回避できた可能性がありますが、2番目の問題を回避できるとは思いません。

したがって、私たちが決定した解決策は、SSISによって定期的に呼び出されるASP.NETページを用意し、それが設定された量の処理(たとえば、30秒)を実行してから戻るようにすることです。ASP.NETページはこの種の処理を行うのに理想的な場所ではないことは知っていますが、これは私たちの要件を最もよく満たしているようです。処理を行うために(ワーカープールからではなく)新しいスレッドを生成することを検討しましたが、そうすると、返されたページを使用して成功または失敗を示すことはできないと判断しました。ページのライフサイクル内で処理することにより、ページのコンテンツを使用して、処理がどのように行われたかを示すことができます。

したがって、問題は次のとおりです。この設定で発生する可能性のある技術的な問題はありますか?

明らかに、このようなことを試したことがあれば、成功/失敗の報告をいただければ幸いです。代替設定の提案も同様です。

乾杯、

4

6 に答える 6

3

これを行うために asp.net スレッドを使用しないでください。メール送信を作成またはトリガーするために必要な情報をサイトが生成している場合は、サイトにファイルまたはデータベースに情報を書き込んでもらいます。

そのファイルまたはデータベースから必要な情報を収集する Windows サービスまたはスケジュールされたプロセスを作成し、完全に別のプロセス/スレッドで電子メール送信プロセスを実行します。

回避したいのは、プロセス ハンドラー内の制限により、サイトがクラッシュしたり、電子メールがクラッシュしたりすることです。質問のタイトルでの「バルク」という言葉の使用に基づいて、2つは互いに独立している必要があります。

于 2010-01-19T23:07:00.093 に答える
2

私はあなたが元気であるべきだと思います。私たちの会社でも同様のアプローチを数年間使用していますが、多くの問題は発生していません。場合によっては、プロセスが完了するまでに 1 時間以上かかることもあります。最近、(あなたが言ったように) 2 番目のスレッドを別のサーバーに移動しました。

于 2010-01-19T23:10:08.573 に答える
1

メーラーと Web サイトを結合することもできますが、それは実際には良い設計ではなく、長期的にはより多くのメンテナンスが必要になります。いくつかのことを行うことで、あなたが述べた問題を回避できます。

  1. 共通ビジネス ロジックを Web サービスまたは共通ライブラリに移動します。Web サイトと実行可能ファイル/WCF サービスの両方がそれを使用でき、ロジックを一元化します。コードをコピーして貼り付けている場合は、何か問題があることがわかります;)

  2. テンプレート メーラーが必要な場合は、ASP.Net クラスを呼び出して動的にページを作成することができます ( BuildManagerクラスや、このようなブログ投稿を参照してください) 。メーラーが Page イベントに依存していない場合 (どうやら)、実行可能ファイルが Web サイト アセンブリから Page クラスを読み込み、動的に構築し、コンテンツを入力するのに問題はないはずです。

これは明らかにかなりの量の作業を表していますが、よりスケーラブルなソリューションにつながるでしょう。

于 2010-01-19T23:10:13.753 に答える
0

その仕事をするためにワーカースレッドを作成する必要があるようです。

于 2010-01-19T22:58:28.243 に答える
0

いくつかのビジネス条件が満たされたときに、ドメインロジック(asp.netアプリケーションを意味します)内にメッセージ本文(テンプレート化されたメッセージ本文)を構築し、メッセージのみを送信する外部サービスに送信することができます。すべてのメッセージには適切な情報が含まれます。

「特定の日付が発生したとき」のシナリオでは、バックグラウンドタスクの簡単なソリューションを使用して(Craigの回答を参照)、上記と同じように、テンプレートの解析、メッセージの作成、指定されたサービスへの高速送信を行うことができます。

もちろん、これを安全に行う必要があります。そうすれば、アプリプールを再起動してもタスクが中断されることはありません。

于 2010-01-20T00:21:04.407 に答える
0

たぶん、 https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/のようなものを見るべきです

于 2010-01-19T23:06:00.580 に答える