c# - 与 RazorEngine 同时发送电子邮件时出错

标签 c# razorengine

我们有一个使用 RazorEngine 解析电子邮件内容并使用 Web API 客户端发送电子邮件的类库。

我们使用它通过控制台应用程序定期发送时事通讯。这非常有效,因为它每天可以发送 50k+ 封电子邮件。

我们还使用它从我们的网络应用程序发送电子邮件(例如,用户创建帐户后的验证电子邮件)。

我们正在使用静态方法 Razor.Parse()

发送的电子邮件中约有 13% 会产生以下错误。

Cannot access a disposed object Object name: 'TypeLoader', source : RazorEngine, stackTrace :    
at RazorEngine.Templating.TypeLoader.CreateInstance(Type type) 
in RazorEngine\\src\\Core\\RazorEngine.Core\\Templating\\TypeLoader.cs:line 55

at RazorEngine.Templating.DefaultActivator.CreateInstance(InstanceContext context) 
in RazorEngine\\src\\Core\\RazorEngine.Core\\Templating\\DefaultActivator.cs:line 20

at RazorEngine.Templating.TemplateService.CreateTemplate(String razorTemplate, Type templateType, Object model) 
in RazorEngine\\src\\Core\\RazorEngine.Core\\Templating\\TemplateService.cs:line 131

at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName) 
in RazorEngine\\src\\Core\\RazorEngine.Core\\Templating\\TemplateService.cs:line 435

这似乎是因为一次发送了多封电子邮件(我们发送的其他电子邮件不会产生此错误)

我们将不胜感激任何帮助,因为我们不知道这是从哪里来的。

最佳答案

我们有同样的错误,但是在 RunCompile 上。 经过一些实验后,我们发现我们从相同的 TemplateServiceConfiguration 为每封电子邮件重新创建了 RazorEngineService。 虽然后者不是 IDisposable,但其中有些东西是。

每次都在创建 RazorEngineService 之前重新创建 TemplateServiceConfiguration 解决了这个问题。 但是,重用 RazorEngineService 也是如此。 显然,一旦您处理了 RazorEngineServiceTemplateServiceConfiguration 中的某些内容也会被处理掉。

因此,如果您要发送多封电子邮件,要么为每个创建 TemplateServiceConfigurationRazorEngineService,要么创建一次并重复使用它们。

关于c# - 与 RazorEngine 同时发送电子邮件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26385031/

相关文章:

RazorEngine 3.2.0 : Razor Namespace not found in . cshtml 文件

c# - TFS API - 更新工作项字段

c# - UnhandledException 在 Windows Phone 上的所有情况下都能正常工作吗?

c# - 简化从表单获取数据的过程

c# - 无法将流作为参数传递给 aspnet.core.NodeServices 中的 JS

jquery - 使用jquery在文本框中动态添加值

c# - 从sql中解析对象

angular - Asp.net core - razor 页面 (.cshtml) 与 Angular 2+

c# - IEnumerable 模型中的多个 DropDownList

asp.net-web-api - RazorEngine WebApiTemplateBase @Url.Content()