看起来我面临着一个问题。我有.NET + Flex应用程序。
我在Flex中有一个组件,它将.XLS文件上传到服务器。
此组件有一个Progress Bar
,它会使用fileref.addEventListener(ProgressEvent.PROGRESS, progressHandler);
private function progressHandler(event:ProgressEvent):void
{
uploadProgress.label = "Uploading File %3%%";
uploadProgress.setProgress(event.bytesLoaded, event.bytesTotal);
}
我使用FileReference和所有的东西来完成这个。我将发布的文件保存在服务器中,如下所示
HttpFileCollection uploadedFiles = Request.Files;
string path = string.Empty;
string sFile = Request.Params["Name"];
if (uploadedFiles.Count != 0)
{
HttpPostedFile userPostedFile = uploadedFiles[0];
if (userPostedFile.ContentLength > 0)
{
path = Server.MapPath(".\\Uploads\\") + sFile;
userPostedFile.SaveAs(path);
}
}
这很好用,我的酒吧和我的标签都刷新了,我的文件被上传到Temp文件夹中,一切正常,所以回到Flex我可以通过{{1}上传文件时收听}。 因此,当调度此事件时,我调用My WebService的WebMethod来读取已发布的文件并迭代所有记录。该文件可能有65,000多行。因此,在某些表中,Oracle数据库中的信息会逐行更新。
我想要实现的目标是在将文件发布到服务器时具有相同的效果。我想要一个进度栏并显示上传到Oracle DB的行数百分比。
所以我在Flex中所做的就是这样:
DataEvent.UPLOAD_COMPLETE_DATA
在C#中我做了这个
//Service is the WebService Instance
ShowPopUpProgress();
Service.wsUploadFileToDb(FileName);
Service.wsUpdatePercentage();
protected function wsUpdatePercentage_result(event:ResultEvent):void
{
compProgress.uploadProgress.label = "Uploading to DB %3%%";
compProgress.uploadProgress.setProgress(event.result.Actual, event.result.Total);
if(event.result.Actual != event.result.Total)
{
Service.wsUpdatePercentage();
}
else
{
RemovePopUpProgress();
}
}
我不知道在这一点上你是否明白我想做什么。我不知道这是不是最好的方式,还是有另一种方法来实现我的目标。但那就是我所拥有的。由于某种原因,这不起作用,会话变量正确存储在 wsUploadFileToDb方法,但我无法在wsUpdatePercentage中看到它们,它们只是“共享”会话。我调试了两种方法,会话ID也不同。所以会话没有被分享。我不知道还能做什么。我在网站的第一页是一个aspx ..我在会话中放了一个虚拟变量,因为我在一篇文章中读到你必须这样做,在网络服务中启动会话但仍然没有运气。
任何帮助都会非常感激。
提前致谢。
答案 0 :(得分:1)
我可以建议另一种方法;而不是尝试在Web应用程序和服务之间共享会话信息,如果您维护一个单独的表,其中包含有关上载到Oracle DB的数据进度的信息,则会更容易。
基本上,您将为从excel插入表中的每一行更新此表,并且您可以从服务中读取此进度表中的信息以将其报告给Flex客户端。
这样,您还可以获得从excel文件到数据库完成的所有上传的审核日志,以及有关它们是否正确成功以及导入的行数的信息。