2016-11-01 3 views
0

私は、メールを送信するためにHttpContextに依存するMVCMailerを使用しています。非同期/待機を使用できるようにMvcMailer用の新しいHttpContextを作成します。

WebBobから、またはConfigureAwait(false)を呼び出すフローで使用される非同期タスクからメールを送信しているため、MVCMailerコードを取得する前にコンテキストを失います。

私のオプションがあるように見える:

  • ConfigureAwait(false)(私のサービスの多くは、いくつかの点でメーリングリストを使用するので、この1つのインスタンスが、私は必要なコンテキストを削除します)
  • 新を使用しないでくださいのHttpContext NEWINGアップHttpConte - 私は迅速かつ簡単な解決策を探していMvcMailerを使用して

第三者を使用しないで1

  • を持っていないにも関わらず、郵送できるように、必要に応じて、必要であればxt。これは可能ですか? MvcMailerがいるHttpContextの参照を持っている場合は、私は抽象的なことだろう

    public class UserMailer : MailerBase { 
        public UserMailer() { 
         MasterName = "_Layout"; 
        } 
    
        public virtual MvcMailMessage Message(MailMessage message, string unsubscribeLink = null) { 
         ViewBag.Body = message.Body; 
         ViewBag.Subject = message.Subject; 
         ViewBag.UnsubscribeLink = unsubscribeLink; 
         return Populate(x => { 
          x.ViewName = "Message"; 
         }); 
        } 
    } 
    
  • +0

    依頼のコンテキスト*を削除しようとしているコードがある場合は、このリクエストのコンテキスト*になる予定がある場合は、バグであり、このクラスの目的だけでなく、一般的には修正する必要がある。このコードは、現在のコンテキストと、それが呼び出すものが概念的には要求とは無関係であることが本当に確かな場合にのみ、現在のコンテキストを削除する必要があります。 – Servy

    +0

    @Servyこれは私が避けたい最初のオプションを挙げた理由です。 – SB2055

    +0

    この部分だけではなく、アプリケーションのあらゆる種類の問題にあらゆる種類の問題を引き起こすバグを修正しないようにすることは、うまくやっていません。あなたのプログラムが、必要な文脈の外でコードを不適切に実行している場合は、修正する必要があります。 – Servy

    答えて

    0

    これは私が今ではのHttpContextに依存を使用しているコードです。一般的なメールインタフェースやベースクラスを作成します(あなたが今MailerBaseとすることを持っているように見えます)あなたが持っている場合はどの:

    public class WebJobMailer : MailerBase { .. } 
    

    を次にあなたがwebjobは、この実装を使用することができますが、あなたのMVCはMvcMailer実装をアプリ... WebJobメーラーはSystem.Net.Mailに落ちるか、他のものを使うことができます。

    +0

    しかし、私はMVCMailerを使うことができません - これは私がやろうとしていることです。 – SB2055

    +1

    MvcMailerを動作させるために偽のHttpContextを作成しようとするのはお勧めできません.HttpContextベースのサービスでは時々問題があります。多くの場合、Web環境に大きく依存するAPIメソッドを知りません。 ..Webジョブがメッセージを送信するIISサーバー上のWebページを呼び出さない限り(明らかに多くの動く部分に問題がある可能性があります)。 –

    関連する問題