5

SmtpClientWrapper の MvcMailer SendAsync メソッドが ASP.NET MVC 要求をブロックするかどうかは誰にもわかりませんか? MvcMailer wiki とコードを見ると、私はそう言うでしょう。

したがって、MVC アプリで安全で真に非同期のメールを送信するには、ここで説明されている WebBackgrounder のようなものを使用する必要がありますか?

私は決定的な答えを探しています。

4

1 に答える 1

5

MvcMailer をダウンロードして独自のテストを実行した後、SendAsync が完了するまで ASP.NET 要求をブロックすることを確認できました。

マイクロソフトはこの動作を確認していますhttps://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

「SendAsync() は SynchronizationContext.OperationStarted() を呼び出します。これは、非同期操作が完了するまで HttpContext インスタンスを破棄しない (または要求を進めない) ための合図です。」

MvcMailer は System.Net.Mail から SendAsync をラップするだけなので、同じ制限があります。

電子メールを非同期で送信する正しい方法は、WebBackgrounder などを使用することです。これは、完全にバックグラウンド操作であるためです (したがって、SendAsync を使用するか Send を使用するかは問題ではありません)。

物事を単純にするために、Ajax を使用して電子メールを送信することもできますが、これにはサーバー操作ではなくクライアントになるという欠点があります。

于 2012-04-21T10:16:43.067 に答える