情景:
用户上传一个小文件或大约100 kB到ASP.NET 4.0应用程序,可能有1000个单位的工作。 然后,服务器开始处理工作单元,一次一个。 由于从外部服务请求信息,每个单元需要几秒钟才能完成。 如果使用事务成功完成所有单元,则结果仅保存到数据库。 完成后,用户可以获得已完成的列表。
问题是用户没有得到确认,相反他的浏览器因为超时而放弃了。
预计未来的文件会增加几倍,从而增加了问题。
我想阻止此超时。
以下是我的一些想法:
我如何实施最后一步,显示进度信息并防止浏览器超时?
欢迎提出其他建议。
谢谢,
答案 0 :(得分:4)
您需要解析处理浏览器响应中的文件。这是通过
实现的答案 1 :(得分:2)
您将上传的数据放入数据库的队列中。然后,您有一个异步进程(示例Windows服务)从队列中提取项目并处理它们。您可以使用每个操作的进度更新数据库,完成后,从队列中删除该项并更新其他表。
对于进度,用户可以在队列表中查询其上传状态。
答案 2 :(得分:0)
一个简单的技巧是编写一段javacsript来重复请求当前页面中的内容。如果您使用HEAD的请求操作,则服务器每次只响应最少量的信息。
类似的东西:
<script src="/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
setTimeout("callserver()",6000);
});
function callserver() {
var remoteURL = '/yourpage.aspx';
$.get(remoteURL, function(data) { setTimeout("callserver()",6000); });
}
</script>