我有一个网站,我需要从用户那里获取一些数据,对.net webservice进行ajax调用,然后webservice会在大约5-10分钟内完成一些工作。
我自然不希望用户必须一直坐在那里,所以我把它变成了对webservice的异步ajax调用,并且在发送调用之后,我将用户重定向到了#34;你完了!"页。
我想要发生的是web服务在收到用户的信息后继续运行完成 - 而不是中止。
从我的测试来看,这或多或少会发生什么,但现在我发现这可能会受到时间的限制?即如果webservice运行超过一定的时间,如果用户仍未连接,它将中止。
我可能会在这个评估中离开这里,但这是我认为从我的测试中发生的事情。
所以我的问题是用.net网络服务,如果这确实发生了什么?如果用户不在另一端,它会在一段时间后中止吗?有没有办法禁用此中止?
提前致谢!
答案 0 :(得分:1)
当您调用Web服务时,即使用户离开调用它的页面,它也将始终完成其工作。
当然,webservices有自己的配置,其中一个设置超时。
如果您正在创建WCF服务(SOAP服务),您可以在其合同中设置它(更改绑定属性),如果您正在使用WebApi或MVC(REST / Http服务)创建服务,那么您可以添加到其配置文件或以其编程方式在其控制器中设置。
HttpContext.Server.ScriptTimeout = 3600; //Number of seconds
这可能是导致webservice中断其工作的原因,但它与客户端发生的事情无关。
度过愉快的一天,
阿尔贝托
答案 1 :(得分:0)
虽然我同意这里的答案在技术上是正确的,但我只是 想发布一个更强大的替代方法,避免一些 您当前的方法可能存在的陷阱,例如
我建议你采取彻底的同步方法并使用 消息队列(例如MSMQ),队列上有一个触发器 将执行工作。
过程将是:
队列上的触发器正在查看消息和消息 到达队列后,它会激活一个过程:
这是非常强大的,因为它完全将Web服务与任何长期运行的工作分离,并且意味着如果用户发出请求并且Web服务器稍后停机(无论出于何种原因),那么工作仍将是当服务器重新上线等时排队等等。
您可以阅读更多相关信息here(MSMQ是MS Message Queue技术;还有很多其他技术!)
只是我的2c