2011-03-15 1 views
2

この回答hereに基づいて、電子メールをキューに入れ、バックグラウンドタスクを実行して送信する必要があります。 ASP.NET-MVCとWCFのアーキテクチャではどうすればよいですか?asp.net-mvc/wcfアプリケーションでバックグラウンドコードを実行するには

  1. キュー(SQLサーバー)を作成するにはどうすればよいですか。
  2. バックグラウンドタスクを作成するにはどうすればよいですか?
+0

私は、これはそれを行うための素晴らしい方法ですわからないんだけど、それはNuGet上だという事実は、それが魅力的です。 :) http://www.hanselman.com/blog/NuGetPackageOfTheWeek2MvcMailerSendsMailsWithASPNETMVCRazorViewsAndScaffolding.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29 – RMD

答えて

0

この猫にはさまざまな方法でスキンを適用できます。重要な点は、電子メールの実際の送信が電子メールのキューイングと非同期であることです。

  1. IIS 7を前提とするこの一連のブログ投稿を使用してMSMQバインディングを使用したWCFサービスを介したキューメッセージ。MSMQ, WCF, and IIS: Getting Them to Play Nice
  2. MSMQへのメッセージをキューに入れます。 MSMQは、Windowsに組み込まれた便利な(時には十分に活用されていない)キューサービスです。このキューからメッセージを受信するWindowsサービスを作成します。 IIS 7を使用している場合は、Death to Windows Services, Long Live AppFabricをチェックしてください。 MSMQは簡単ですが、いくつかの奇妙な制約(4MBのメッセージサイズと可用性)があります。
  3. 「SQLキュー」へのメッセージをキューに入れます。基本的なキューに入れられたメッセージ情報を保持するテーブルを作成し、キューのセマンティクスをラップするためのストアドプロシージャを作成します(複数のコンシューマに同じメッセージを受け取らないようにするなど)。困難ではありませんが、ちょっとした時間がかかります。
  4. Service Broker(またはMSMQ)にメッセージを送信し、Service Broker Queueからメッセージを受信するWindowsサービスを作成します。 Service Brokerは、キューイングセマンティクス(競合するコンシューマ)を処理します。欠点は、そのお尻の痛みが管理することです。

HTH、

Z

0

あなたのソリューションはMVCを使用しているという事実から独立していると思います。

これまで私がこれを実装してきた方法は、電子メールをデータベースに送信してから、Windowsサービスを使用してこれを処理する必要があるという事実を維持することです。

これを行う別の方法は、記憶媒体としてMSMQを利用することです。一般的に、MSMQはメッセージ転送メカニズムとしてのみデータを格納するために使用するべきではありませんが、この場合は確かにオプションです。

「キュー」を開発するという点では、何らかの理由で注文した配送が必要な場合は、データベーステーブルに「RequestedDTTM」列を置くだけで、要求された順序でメールを送信できます。

最後に、パフォーマンスを最大限に高めるために単純にマルチスレッドの電子メール送信者を実装することを検討します。 TPLを.NET 4.0で使用すると、これはかなり簡単になります。また、SmartThreadPoolライブラリ(codeplex.comで入手可能)のようなものを使用して、電子メールの送信者スレッドを管理することもできます。

あなたがリンクしている他の回答でも言及したように、あなたのUIはこの電子メール送信を行うべきではありません。

関連する問題