Не могу сделать Response.Redirect, когда я использую WebClient с Silverlight 4.0 для вызова страницы aspx - PullRequest
2 голосов
/ 10 ноября 2010

Я работаю над проектом Silverlight. Когда я сохранил изображение JPG в потоке памяти, чтобы сохранить его в Context.InputStream, он работает нормально. Я вызываю страницу aspx, которая загружает поток на сервер.

Но я не могу сделать «response.redirect» или «server.transfer», когда загрузка завершена или не удалась. Это потому, что я вызываю страницу aspx из Silverlight с помощью WebClient?

Пожалуйста, найдите код в Silverlight ниже:

 private void UploadFile(string fileName, Stream data){ 

 UriBuilder ub = new UriBuilder("http://localhost:52544/WebForm1.aspx");

//add a parameter filename  into the queryString

ub.Query = string.Format("filename={0}", fileName);

WebClient c = new WebClient();

c.OpenWriteCompleted += (sender, e) =>
   {

      PushData(data, e.Result);
      e.Result.Close();
      data.Close();
   };
c.OpenWriteAsync(ub.Uri);
}

На странице aspx у меня есть этот код

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {             
                // get the filename

                string filename = Request.QueryString["filename"].ToString();

                // create a file on the server dir

                using (FileStream fs = File.Create(Server.MapPath("~/AppData/" + filename)))
                {
                    SaveFile(Request.InputStream, fs);
                }

                    Response.Redirect("uploadOk.aspx", true);
                }
                catch (Exception ex)
                {

                }


        }


        private bool SaveFile(Stream stream, FileStream fs)
        {
            bool isSaved = true;
            byte[] buffer = new byte[4096];
            int bytesRead;
            try
            {
                // copy the stream into the file

                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    fs.Write(buffer, 0, bytesRead);
                }
                isSaved = true;
            }
            catch (Exception e)
            {
                isSaved = false;
            }
            return isSaved;
        }
    }

Я тоже попробовал response.redirection ("uploadOk.aspx", false), и он не работает. Я получил следующее исключение «[System.Threading.ThreadAbortException] = {Невозможно оценить выражением, потому что код оптимизирован или собственный фрейм находится над стеком вызовов.} ”

У вас есть идея, как я могу сделать перенаправление с помощью WebClient?

Заранее спасибо

1 Ответ

0 голосов
/ 10 ноября 2010

Я считаю, что ваша проблема в том, что загрузка не удалась, но, поскольку она находится в другом потоке, SL не показывает правильную ошибку Попробуйте добавить код для регистрации ошибки, когда это произойдет, и посмотрите, что это за ошибка. Вы можете сделать это и на сервере.

Я подозреваю, что проблема в том, что заголовок уже записан, поэтому он не может перенаправить.

Попробуйте, так как я думаю, что проблема в 100-продолжить:

 c.Headers.Add( HttpRequestHeader.KeepAlive, "false");
 c.Headers.Add(HttpRequestHeader.Expect, "");
...