我有一个带有一个按钮的c# asp.net管理系统,该按钮调用Server查询以获得9万字符串的多语言文本,并将其分类为几个部分。这反过来是排序和150个二进制文件,然后保存为一个.ZIP和电子邮件给用户的结果。处理和电子邮件结果的总时间约为6分钟。在此期间,Web页面正等待整个过程的完成。我希望能够按下开始处理按钮,然后允许它在后台工作,而我继续使用网络管理系统,但我不确定什么是最有效的方法来这样做。我最初创建了一个asmx文件,认为这样可以工作,但是结果是一样的,所以我现在正在研究异步和等待。有人能在这方面给我指点吗?如果我在正确的轨道上,请告诉我。我目前没有得到任何东西,让我知道过程已经成功完成,因为我可以通过电子邮件用户说出了问题。原因是用户可能在任意数量的页面上。
发布于 2015-01-29 23:09:16
要解决这个问题,可能有几条路可走。您的选项将根据您使用的.NET版本而有所不同,因此我不会直接发布代码;但是,您可以使用ASMX服务、WCF、MVC等实现我描述的概念。
启动和轮询方法
对于这类问题的典型响应是实现StartSomething()方法和GetProgress()方法。使用基于ASMX的web服务出现在这里的这种方法的一个非常简单的例子。
在该示例中,使用一种服务方法在后台线程上启动进程。我自己也会修改这个示例,让start方法向客户端返回一个值,以确定启动了哪个后台进程,因为一次可能会有几个进程正在进行。
然后,客户端可以调用一个单独的方法来获取进度更新,并继续轮询直到流程完成。
为什么您更喜欢在非IIS服务中进行冗长的后台处理?有许多原因。我建议使用Windows服务来保护自己不受IIS的影响--在大作业中随机重新启动应用程序池。
WebSockets
另一个值得您探索的选项是使用WebSockets,它允许服务器在进程完成后与现代浏览器联系。这种方法的主要优点是客户端不需要繁忙地轮询服务以获得更新。它的主要缺点是WebSockets足够新,以至于仍然有很多浏览器不能成为这种服务的客户端。
祝好运!
https://stackoverflow.com/questions/28225702
复制相似问题