即使用户离开页面,如何使Web服务运行完成

时间:2014-02-13 13:38:25

标签: c# .net ajax

我有一个网站,我需要从用户那里获取一些数据,对.net webservice进行ajax调用,然后webservice会在大约5-10分钟内完成一些工作。

我自然不希望用户必须一直坐在那里,所以我把它变成了对webservice的异步ajax调用,并且在发送调用之后,我将用户重定向到了#34;你完了!"页。

我想要发生的是web服务在收到用户的信息后继续运行完成 - 而不是中止。

从我的测试来看,这或多或少会发生什么,但现在我发现这可能会受到时间的限制?即如果webservice运行超过一定的时间,如果用户仍未连接,它将中止。

我可能会在这个评估中离开这里,但这是我认为从我的测试中发生的事情。

所以我的问题是用.net网络服务,如果这确实发生了什么?如果用户不在另一端,它会在一段时间后中止吗?有没有办法禁用此中止?

提前致谢!

2 个答案:

答案 0 :(得分:1)

当您调用Web服务时,即使用户离开调用它的页面,它也将始终完成其工作。

当然,webservices有自己的配置,其中一个设置超时。

如果您正在创建WCF服务(SOAP服务),您可以在其合同中设置它(更改绑定属性),如果您正在使用WebApi或MVC(REST / Http服务)创建服务,那么您可以添加到其配置文件或以其编程方式在其控制器中设置。

HttpContext.Server.ScriptTimeout = 3600; //Number of seconds

这可能是导致webservice中断其工作的原因,但它与客户端发生的事情无关。

度过愉快的一天,

阿尔贝托

答案 1 :(得分:0)

  

虽然我同意这里的答案在技术上是正确的,但我只是   想发布一个更强大的替代方法,避免一些   您当前的方法可能存在的陷阱,例如

  • Web服务器在长时间运行的请求处理期间被退回
  • 处理期间回收的Web服务器应用程序池
  • 由于长时间运行的请求太多而无法处理更多请求而导致Web服务器耗尽线程
  

我建议你采取彻底的同步方法并使用   消息队列(例如MSMQ),队列上有一个触发器   将执行工作。

过程将是:

  • 您的页面使Ajax调用Webservice
  • Webservice将消息写入队列并立即返回。该消息包含需要执行哪些工作的详细信息。
  • 用户像往常一样继续在您的网站上,或回家等等。
  

队列上的触发器正在查看消息和消息   到达队列后,它会激活一个过程:

  • 阅读邮件
  • 执行必要的工作
  • 使用工作结果更新任何后端存储等

这是非常强大的,因为它完全将Web服务与任何长期运行的工作分离,并且意味着如果用户发出请求并且Web服务器稍后停机(无论出于何种原因),那么工作仍将是当服务器重新上线等时排队等等。

您可以阅读更多相关信息here(MSMQ是MS Message Queue技术;还有很多其他技术!)

只是我的2c