当我使用SilverCl 4.0的WebClient来调用aspx页面时,无法做Response.Redirect

时间:2010-11-10 13:34:20

标签: c# silverlight-4.0 webclient response.redirect server.transfer

我正在开发一个Silverlight项目。 当我将jpg图片保存到内存流中以保存它时 进入Context.InputStream,它工作正常。 我正在调用一个aspx页面,它将上传文件串入服务器。

但是,当上传完成或失败时,我无法执行“response.redirect”或“server.transfer”。 是因为我使用WebClient从Silverlight调用我的aspx页面?

请在下面的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 :(得分:0)

我认为您的问题是上传失败但因为它位于不同的线程上,SL不会显示正确的错误。尝试添加代码以在错误发生时记录错误并查看错误。您也可以在服务器上执行此操作。

我怀疑问题是标题已写入,因此无法重定向。

尝试这个,因为我认为问题是100-continue:

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