在c#的.NET 3.5网站上,用户点击我们网页上的提交,他们通过电子邮件地址订阅我们的报告。不幸的是,此操作大约需要5分钟,用户必须等待确认。我想要做的是更改它,以便当他们点击提交时,他们会弹出一个弹出窗口,表示他们将在订阅通过时通过电子邮件通知,同时我会在服务器上的其他位置排队订阅操作,以便它不存在于Web代码中。你能告诉我一些方法吗?基本的想法是,我想分成两个不同的执行线,其中一个将允许他们仍然浏览我们的网站,另一个将订阅它们。我正在考虑拆分成一个新线程,但我认为Web代码仍然需要等待该线程完成才能完成其他任务。我在寻找想法,最好能在同一台服务器上运行。谢谢!
答案 0 :(得分:2)
有很多选择,但基本方法是将网站与提供商分离。相反,你会写出一条记录,说“用户X正在等待订阅”,然后一个单独的进程将读取记录并执行实际订阅,同时将记录标记为“正在进行中”。一旦该过程完成,记录将再次使用完成的信息进行更新。
您可以使用数据库,消息队列或其他方法实现此目的。但从根本上说,您的网站只负责创建记录并检查其状态 - 与提供商的实际交互将单独处理。
答案 1 :(得分:0)
如果你有一些需要这么长时间并且你想要真实并确保行动通过的东西,那么你最好的选择就是排队。
基本上,当他们提交请求时,将其存储在数据库表中并让他们继续前进。同时,让另一个进程监视该表以处理请求。当他们进来时,只需让第二个过程将请求发送到需要5分钟完成的部分。
完成后,向他们发送“欢迎使用此类电子邮件列表”消息。这将证明它有效。
答案 2 :(得分:0)
http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/