我在我的MVC3应用程序中使用Rotativa生成pdf到内存流,然后通过电子邮件发送出去作为电子邮件附件。这样工作正常但速度很慢(只有1个用户约5-7秒)所以我一直试图把它放到一个单独的线程中,这样用户就不会遇到很大的延迟。
我遇到的问题是Rotativa需要Controller Context将数据生成到内存流中,这意味着如果您尝试将其放入单独的线程并向用户返回通知,则上下文为处置,pdf生成将失败。
不幸的是,我在服务器端进行了电子邮件验证检查,并在适当的时候返回true / false,false会提示用户修复它并再试一次。这意味着我不能只假设电子邮件始终有效(我可以通过jquery执行此操作,但如果他们将其关闭并尝试提交,则不会收到错误消息)。
到目前为止,我已经尝试过:
有没有人有其他想法?
答案 0 :(得分:0)
以下是我在后台使用上下文运行长进程的操作。我正在使用由数据库支持的自定义会话。您需要将所需的任何值传递到“后台”操作中。
using (var client = new WebClient())
{
var values = new NameValueCollection
{
{ "sessionid", DataSession.Id.ExtractSid() }
};
client.UploadValuesAsync(new Uri(Url.AbsoluteAction("ResultsCallback", "Quote")), values);
}