C# 将Postal与QueueBackgroundWorkItem一起使用-无法创建请求生存期范围>;因为HttpContext不可用
我用邮局发电子邮件。 我的应用程序是一个ASP.net MVC应用程序。我使用Autofac(MVC5集成) 我已经建立了这样的邮政系统: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
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()