2

Я работаю над проектом Silverlight. Когда я сохранил jpg-изображение в memystream, чтобы сохранить его в Context.InputStream, он работает нормально. Я вызываю страницу aspx, которая загружает загрузку на сервер.Не удается выполнить Response.Redirect, когда я использую WebClient с Silverlight 4.0 для вызова страницы 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", ложь) тоже, и он не работает. я получил следующее исключение «[System.Threading.ThreadAbortException] = {Невозможно оценить выражение, потому что код оптимизирован или уроженцем кадр на вершине стека вызовов.}»

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

Спасибо заранее

ответ

0

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

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

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

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

Спасибо за ваш ответ, но я не имею метод c.Headers.Add в Silverlight. У меня есть только AllKeys, AsQueryable, Cast, ... но не Add method.I думаю, что вы правы, проблема в том, что заголовки уже написаны. Можете ли вы помочь мне, пожалуйста, исправить это? Thx заранее. – Shimon