C# 将Postal与QueueBackgroundWorkItem一起使用-无法创建请求生存期范围>;因为HttpContext不可用

C# 将Postal与QueueBackgroundWorkItem一起使用-无法创建请求生存期范围>;因为HttpContext不可用,c#,autofac,postal,C#,Autofac,Postal,我用邮局发电子邮件。 我的应用程序是一个ASP.net MVC应用程序。我使用Autofac(MVC5集成) 我已经建立了这样的邮政系统: dynamic email = new Email("TemplateName"); email.To = "test@email.com"; email.From = "sendertest@email.com"; email.TemplateValue = "This is a value

我用邮局发电子邮件。 我的应用程序是一个ASP.net MVC应用程序。我使用Autofac(MVC5集成)

我已经建立了这样的邮政系统:

        dynamic email = new Email("TemplateName");
        email.To = "test@email.com";
        email.From = "sendertest@email.com";

        email.TemplateValue = "This is a value";

        var service = new EmailService();

        HostingEnvironment.QueueBackgroundWorkItem(ct =>
        {
            service.Send(email);
        });
此操作失败,出现以下错误:

中发生“System.InvalidOperationException”类型的异常 Autofac.Integration.Mvc.dll,但未在用户代码中处理

其他信息:无法创建请求生存期范围 因为HttpContext不可用

位于Autofac.Integration.Mvc.RequestLifetimeScopeProvider.GetLifetimeScope(操作'1 configurationAction)
在Autofac.Integration.Mvc.AutofacDependencyResolver.get_RequestLifetimeScope()中
在Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(类型serviceType)
在System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create(ControllerContext ControllerContext,键入类型)中
位于System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext、ViewContext、TextWriter)
在Postal.EmailViewRenderer.RenderView(IView视图、ViewDataDictionary视图数据、ControllerContext ControllerContext、ImageEmbedder ImageEmbedder)
在Postal.EmailViewRenderer.Render(电子邮件,字符串viewName)
在Postal.EmailService.CreateMailMessage(电子邮件)
在Postal.EmailService.Send(电子邮件)
在CallSite.Target(Closure、CallSite、EmailService、Object)
在System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](调用站点,T0 arg0,T1 arg1)
在EmailSender.c__中显示Class3_0.b__0(CancellationToken ct)在…EmailSender.cs:第42行
在System.Web.Hosting.HostingEnvironment.c\uuu DisplayClass91\u0.b\u0(CancellationToken ct)
在System.Web.Hosting.BackgroundWorkScheduler.d_u7.MoveNext()中
如果我使用
服务,发送(电子邮件)
QueueBackgroundWorkItem
之外工作


我理解这是因为当前的
HttpContext.Current
不可用-但有没有一种方法可以在后台线程上使用Postal发送电子邮件?

您尝试过创建自定义视图引擎吗

正如所建议的,可以在ASP.NET请求范围之外使用postal(我知道您使用的是MVC 5,但在我看来情况相同)


如果仍然出现错误,可能是Autofac注册的问题:是否在请求范围内注册了某些内容,如
.InstancePerRequest()?在这种情况下,Autofac将无法解析管道外的组件。

Postal只需创建一个
MailMessage
对象,而无需发送它。看

因此,可以在HttpContext仍处于活动状态时,在MVC控制器操作中执行此操作


然后,使用您自己的
SmtpClient

实例,在后台线程中发送
MailMessage

您好,我也面临同样的问题。您能否就如何实施此解决方案向我提供更多指导。如何在使用自己的smtpClient实例创建电子邮件后发送电子邮件
   at Autofac.Integration.Mvc.RequestLifetimeScopeProvider.GetLifetimeScope(Action`1 configurationAction)  
   at Autofac.Integration.Mvc.AutofacDependencyResolver.get_RequestLifetimeScope()  
   at Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(Type serviceType)  
   at System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create(ControllerContext controllerContext, Type type)  
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)  
   at Postal.EmailViewRenderer.RenderView(IView view, ViewDataDictionary viewData, ControllerContext controllerContext, ImageEmbedder imageEmbedder)  
   at Postal.EmailViewRenderer.Render(Email email, String viewName)  
   at Postal.EmailService.CreateMailMessage(Email email)  
   at Postal.EmailService.Send(Email email)  
   at CallSite.Target(Closure , CallSite , EmailService , Object )  
   at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite site, T0 arg0, T1 arg1)  
   at EmailSender.<>c__DisplayClass3_0.<Handle>b__0(CancellationToken ct) in .....EmailSender.cs:line 42  
   at System.Web.Hosting.HostingEnvironment.<>c__DisplayClass91_0.<QueueBackgroundWorkItem>b__0(CancellationToken ct)  
   at System.Web.Hosting.BackgroundWorkScheduler.<RunWorkItemImpl>d__7.MoveNext()