Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户在网页上等待确认的时间太长。。。解决?_C#_.net - Fatal编程技术网

C# 用户在网页上等待确认的时间太长。。。解决?

C# 用户在网页上等待确认的时间太长。。。解决?,c#,.net,C#,.net,在我们的.NET 3.5 c#网站上,用户单击我们网页上的提交,他们通过电子邮件地址订阅我们的报告。不幸的是,此操作大约需要5分钟,用户必须坐下来等待确认。我想做的是更改它,这样当他们单击submit时,他们会得到一个弹出窗口,上面说当他们的订阅通过时,他们会收到电子邮件通知,同时我会在服务器上的其他地方将订阅操作排队,这样它就不会出现在web代码中。你能给我一些方法吗?基本的想法是,我想分为两个不同的执行行,其中一个允许他们仍然浏览我们的网站,另一个将订阅他们。我正在考虑拆分成一个新线程,但我

在我们的.NET 3.5 c#网站上,用户单击我们网页上的提交,他们通过电子邮件地址订阅我们的报告。不幸的是,此操作大约需要5分钟,用户必须坐下来等待确认。我想做的是更改它,这样当他们单击submit时,他们会得到一个弹出窗口,上面说当他们的订阅通过时,他们会收到电子邮件通知,同时我会在服务器上的其他地方将订阅操作排队,这样它就不会出现在web代码中。你能给我一些方法吗?基本的想法是,我想分为两个不同的执行行,其中一个允许他们仍然浏览我们的网站,另一个将订阅他们。我正在考虑拆分成一个新线程,但我认为web代码仍然需要等待该线程完成,然后才能执行其他操作。我在寻找想法,最好是可以在同一台服务器上运行的东西。谢谢

如果你有需要这么长时间的事情,你想实现并确保行动顺利进行,那么你最好的办法就是排队等待

基本上,当他们提交请求时,将其存储在数据库表中,然后让他们继续。同时,还有另一个进程监视该表以处理请求。当他们进来时,让第二个流程将请求发送到需要5分钟才能完成的部件


完成后,向他们发送一条“欢迎访问某某电子邮件列表”消息。这将作为他们对其有效性的确认。

有很多选择,但基本方法是将站点与提供商分离。相反,您将写出一条记录,上面写着“用户X正在等待订阅”,然后一个单独的进程将读取该记录并执行实际订阅,同时将该记录标记为“正在进行”。流程完成后,将再次使用完成的信息更新记录


您可以通过数据库、消息队列或其他方法实现这一点。但从根本上说,您的网站只负责创建记录并检查其状态——与提供商的实际交互将单独处理。

杰夫·阿特伍德不久前在这里就相关主题发表了博客。由于您使用的是c#,因此我假设您使用的是ASP.NET,并且可以利用缓存机制启动定期工作任务。根据用户的请求,您可以将订阅的详细信息持久化到某些数据存储。在该作业中,您可以检查队列以确定需要创建哪些订阅,然后执行它们


当你说“进程”时,你的意思是写另一个在服务器上运行的程序,对吗?“过程没有什么特别的吗?”米莉:这正是我的意思。另一个程序:通常是windows服务。