смотри я сталкиваюсь с проблемой.У меня есть приложение .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, я могу слушать, когда файл был загружен через DataEvent.UPLOAD_COMPLETE_DATA
.Поэтому, когда отправляется это событие, я вызываю WebMethod моего WebService, чтобы прочитать этот опубликованный файл и выполнить итерацию по всем записям.Файл может иметь более 65 000 строк.Таким образом, информация обновляется строка за строкой в БД Oracle в некоторых таблицах.
То, что я пытаюсь архивировать, - это то же самое, когда Файл публикуется на сервере.Я хочу иметь индикатор выполнения и показывать% строк, загруженных в базу данных Oracle.
Итак, то, что я сделал во 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"]);
}
}
Я не знаю, если в этот момент вы понимаете, что я хочу сделать.Я не знаю, является ли это лучшим способом, или есть другой способ достигнуть своей цели.Но это то, что у меня так далеко.И по какой-то причине это не работает, переменные Session правильно хранятся в методе wsUploadFileToDb, но я не вижу их в wsUpdatePercentage, они просто не «разделяют» сеанс.Я отлаживал оба метода, и идентификатор сеанса отличается.Так что сессия не передается.Я не знаю, что еще делать.Моя первая страница на сайте - aspx. Я поместил фиктивную переменную в сеанс, потому что я прочитал в одном посте, что вы должны были это сделать, чтобы начать сеанс в веб-сервисах, но все же не повезло.
Любая помощь будет очень признателен.
Заранее спасибо.