看起来即时通讯面临一个问题。我有.NET + Flex应用程序。C#WebServices和Flex RPC会话不起作用
我有一个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和所有的事情acomplish此更新其栏和标签。我在服务器中发布文件的东西保存这样
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);
}
}
这工作完全正常,我的吧,我的标签被刷新ok了,我的文件在Temp文件夹上传并一切正常,所以回到到Flex我可以通过DataEvent.UPLOAD_COMPLETE_DATA
上传文件。 因此,当调度此事件时,我调用Web服务的WebMethod来读取已发布的文件并遍历所有记录。该文件可能有65,000多行。因此,在某些表中,信息在Oracle DB中逐行更新。
我试图实现的是当文件发布到服务器时具有相同的效果。我想要一个进度条并显示上载到Oracle DB的行的百分比。
所以我在Flex中做的是这样的:
//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();
}
}
而在C#我这样做
[WebMethod(EnableSession = true)]
public void wsUploadFileToDb(string fileName)
{
HttpContext.Current.Session["Total"] = 0;
HttpContext.Current.Session["Actual"] = 0;
//... And in the Loop
HttpContext.Current.Session["Total"] = myDataTable.Rows.Count;
for (int i = 0; i < myDataTable.Rows.Count; i++)
{
HttpContext.Current.Session["Actual"] = i + 1;
}
}
[WebMethod(EnableSession = true)]
[XmlInclude(typeof(Percentage))]
public Percentage wsUpdatePercentage()
{
Percentage oPercentage= new Percentage();
if (HttpContext.Current.Session["Total"] != null)
{
oPercentage.Total = Convert.ToInt32(HttpContext.Current.Session["Total"]);
oPercentage.Actual= Convert.ToInt32(HttpContext.Current.Session["Actual"]);
}
}
我不知道在这一点上,你明白我想做的事。我不知道这是最好的方式,还是有另一种方法来实现我的目标。但那就是我所拥有的。由于某种原因,这是行不通的,会话变量正确存储在 wsUploadFileToDb方法,但我无法看到他们在wsUpdatePercentage,他们只是不“共享”会话。我调试了这两种方法,会话ID是不同的。所以会话不被共享。我不知道还有什么要做。我在网站上的第一页是一个aspx ..我在会话中放置了一个虚拟变量,因为我在一篇文章中读到你必须这样做,在web服务中启动会话,但仍然不是运气。
任何帮助将非常感激。
在此先感谢。
感谢您的回复,我在第一时间就想到了这一点,但我不想放慢这个过程。但是我没有在这方面看到它,有一个审计日志。让我试试看,并检查它的性能。谢谢。 –
我这样做,它运行良好,它不能解决有关会话的问题......但它解决了问题。感谢:D –