我有一个逐行读取文件的asp.net页面。处理每一行并将其添加到db或丢弃。完成此操作后,我将添加到计数器,因此我知道处理的行数,然后将HttpContext.Current.Cache [“TotalRecords”]设置为等于计数器。 在我的ASP页面中,我有一个名为GetLatestCount的页面方法(见下文)。
[System.Web.Services.WebMethod]
public static int GetLatestCount()
{
int dt=0;
try
{
dt = (int)HttpContext.Current.Cache["TotalRecs"];
}
catch (Exception ex)
{
console.log();
}
return (dt);
}
在我的客户端脚本中,我使用Javascript轮询该PageMethod。不是AJAX或JQUERY。
<script language="javascript" type="text/javascript">
function Check()
{
// Call the static page method.
try
{
PageMethods.GetLatestCount(OnSucceeded, OnFailed);
}
catch (ex)
{
console.log();
}
}
function OnSucceeded(result, userContext, methodName)
{
try
{
// Parse the page method's result and the embedded
// hidden value to integers for comparison.
var TotalRecs = parseInt(result);
if (TotalRecs == 999999)
{
lblTotalRecs.innerHTML = "";
}
else
{
lblTotalRecs.innerHTML = "Processing Record: " + TotalRecs;
setTimeout("Check()", 500);
}
}
catch(ex)
{
}
}
function OnFailed(error, userContext, methodName)
{
alert(error);
}
我正在阅读的文件有4000多行,因此需要一段时间才能处理。两次javascript轮询进程似乎没有再次触发,直到处理了一半文件(读取2065行)或最多30秒。但即便如此也是零星的。有时读3000行或读1000行。之后,它按照我想象的方式工作,并跟踪文件的进度。关于为什么它只获取文件的最后部分而不是第一部分的任何想法?如何在流程开始时使其工作?