首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理长任务时请求超时错误

处理长任务时请求超时错误
EN

Stack Overflow用户
提问于 2015-01-29 22:18:01
回答 1查看 101关注 0票数 0

我有一个带有一个按钮的c# asp.net管理系统,该按钮调用Server查询以获得9万字符串的多语言文本,并将其分类为几个部分。这反过来是排序和150个二进制文件,然后保存为一个.ZIP和电子邮件给用户的结果。处理和电子邮件结果的总时间约为6分钟。在此期间,Web页面正等待整个过程的完成。我希望能够按下开始处理按钮,然后允许它在后台工作,而我继续使用网络管理系统,但我不确定什么是最有效的方法来这样做。我最初创建了一个asmx文件,认为这样可以工作,但是结果是一样的,所以我现在正在研究异步和等待。有人能在这方面给我指点吗?如果我在正确的轨道上,请告诉我。我目前没有得到任何东西,让我知道过程已经成功完成,因为我可以通过电子邮件用户说出了问题。原因是用户可能在任意数量的页面上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 23:09:16

要解决这个问题,可能有几条路可走。您的选项将根据您使用的.NET版本而有所不同,因此我不会直接发布代码;但是,您可以使用ASMX服务、WCF、MVC等实现我描述的概念。

启动和轮询方法

对于这类问题的典型响应是实现StartSomething()方法和GetProgress()方法。使用基于ASMX的web服务出现在这里的这种方法的一个非常简单的例子。

在该示例中,使用一种服务方法在后台线程上启动进程。我自己也会修改这个示例,让start方法向客户端返回一个值,以确定启动了哪个后台进程,因为一次可能会有几个进程正在进行。

然后,客户端可以调用一个单独的方法来获取进度更新,并继续轮询直到流程完成。

为什么您更喜欢在非IIS服务中进行冗长的后台处理?有许多原因。我建议使用Windows服务来保护自己不受IIS的影响--在大作业中随机重新启动应用程序池。

WebSockets

另一个值得您探索的选项是使用WebSockets,它允许服务器在进程完成后与现代浏览器联系。这种方法的主要优点是客户端不需要繁忙地轮询服务以获得更新。它的主要缺点是WebSockets足够新,以至于仍然有很多浏览器不能成为这种服务的客户端。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28225702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档