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

时间:2014-10-15 14:26:21

标签: c# razorengine

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

我们使用它定期发送带有控制台应用程序的简报。这非常有效,因为它每天可以发送5万封电子邮件。

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

我们正在使用静态方法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

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

我们非常感谢任何帮助,因为我们不知道这是从哪里来的。

1 个答案:

答案 0 :(得分:0)

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

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

因此,如果您要发送多封电子邮件,请为每个电子邮件创建TemplateServiceConfigurationRazorEngineService,或者同时创建一次并重复使用。