具有缓冲区刷新的循环内部经典ASP故意等待/延迟

时间:2014-04-23 00:13:21

标签: vbscript asp-classic

我们有一个发送电子邮件的脚本,我们希望有意等待消息之间的n毫秒,以免泛滥服务器。 asp_Wait()我发现有效,但没有任何输出。也就是说,当脚本完全运行时,它会转储到页面。

我的目标是在浏览器执行时查看每一行,以便我可以监控脚本的进度。

我已尝试使用相同的好奇结果缓冲ON和OFF(Server 2008 R2,IIS7)。测试循环演示了这一点,循环中延迟1秒,加载页面需要n秒,我在每行上放Now()以查看该循环何时执行(证明等待)工作),但我没有看到在脚本执行过程中输出一行。

<%
Dim IsBuffer ' this allows easy toggling of the buffer feature
    IsBuffer = False
If IsBuffer Then Response.Buffer = True End If
Server.ScriptTimeout=7200  ' 2 hours (yes this is overkill!!)

i = 0
Response.Write "<h2>Test Page</h2><hr>"
If IsBuffer Then Response.Flush() End If ' flush the header

while i < 20
    i = i + 1
    Response.Write i & " at: " & Now() & "<br />" & VbCrLf
    If IsBuffer Then Response.Flush() End If
    Call asp_Wait(1000) ' milliseconds  
wend

Response.Write "<br /><strong>**TOTAL OF " & i & " LOOPS.**</strong><br />" & vbCrLf

Sub asp_Wait(nMilliseconds)
  Dim oShell
  Set oShell= Server.CreateObject("WScript.Shell")
  Call oShell.run("ping 1.2.3.4 -n 1 -w " & nMilliseconds,1,TRUE)
End Sub
%>

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

我相信IIS7的默认配置可以启用GZIP压缩。启用压缩后,ASP会忽略Response.Flush()语句。

请尝试按照here说明禁用压缩,看看是否有帮助。

修改:同时找到this

答案 1 :(得分:0)

我喜欢让客户端使用重定向到这样的页面来处理延迟:

<%
ID_template= request.querystring("ID_template")
s_resume=request.querystring("resume")
s_file = "admin_email_send_go.asp?ID_template=" & ID_template
if (s_resume="yes") then s_file = "admin_email_send_resume.asp?ID_template=" & ID_template
%>
<html>
<head>
<meta http-equiv="Refresh" content="<%=int(session("n_records")/50)%>; url=<%=s_file%>">
    <script type="text/javascript">
    <!--
    function delayer(){
    document.location = "<%=s_file%>"
    }
    //-->
    </script>
</head>
<body onLoad="setTimeout('delayer()',<%=int(session("n_records")*20)%>)" bgcolor='#FFFFFF'>
<br>
<table width='100%' height='100%'>
<tr>
<td valign=middle align=center>
    <table border=1>
    <tr>
    <td>
        Total list size: <%=session("n_records")%><br>
        Sent so far: <%=session("n_records_sent")%>
    </td>
    </tr>
    </table><br>
    <br>
    Sending next group of <%=application("email_group_size")%> in 2 seconds.<br>
    Please wait...<br>
    <br>
    If you want to quit or pause the process at any time, click <a href='admin_email_send.asp?ID_template=<%=ID_template%>'>here</a>.<br>
    <br>
</td>
</tr>
</table>
</body>
</html>