ASP.NET Web窗体中的长进程 - 浏览器超时

时间:2016-10-31 12:26:08

标签: c# asp.net wcf webforms async-await

我意识到这个问题已经被提出了不同的变化但是.net的新功能(例如async await)我想知道什么解决方案是最好的。

我有一个C#.Net Web Forms应用程序,它有一个长时间运行的任务:该任务处理用户请求,他们上传csv数据文件,序列化为对象,然后导入数据库。该任务可能需要几分钟,浏览器会定期超时 - 这会导致可用性问题。

我已经看到很多解决方案,而用户将上传数据,然后任务在后台执行。然后,该页面将间歇性地调用服务器以请求任务的状态,从而使用户了解进度。

我想知道这是如何实现的?我在桌子上看到的选项:

  • Windows服务
  • Web服务 - 如何托管:IIS或Windows服务?
  • 异步,等待 - 这是一种可能吗?

1 个答案:

答案 0 :(得分:1)

我认为你可以采取两种不同的方法。

第一种是拉取方法,你将保持每个用户在服务器中的进程状态,可能在会话中,并且让进程更新该状态,然后客户端可以定期通过ajax拉出实际状态。 ajax调用是从客户端的浏览器调用的,并且该函数可以放在客户端正在查看的同一个网页中,如果仅从那里使用它,则无需将其分开。

第二种可能是推送方式,这有点复杂,但为您提供其他可能性。您需要使用信号器https://www.asp.net/signalr之类的库,它允许您从服务器与客户端的浏览器进行通信,调用JS函数,并将更新后的状态推送到客户端的表单。这可以创建更实用的双向通信和更好的用户体验,以换取更多的复杂性。