2

私は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]={コードが最適化されているか、ネイティブフレームが呼び出しスタックの最上位にあるため、式を評価できません。}」</ p>

WebClientを使用してリダイレクトを実行する方法を知っていますか?

前もって感謝します

4

1 に答える 1

0

あなたの問題は、アップロードが失敗することだと思いますが、別のスレッド上にあるため、SL は正しいエラーを表示しません。エラーが発生したときにエラーをログに記録し、エラーの内容を確認するコードを追加してみてください。これはサーバー上でも実行できます。

問題は、ヘッダーが既に書き込まれているため、リダイレクトできないと思われます。

問題は100-continueだと思うので、これを試してください:

 c.Headers.Add( HttpRequestHeader.KeepAlive, "false");
 c.Headers.Add(HttpRequestHeader.Expect, "");
于 2010-11-10T13:51:29.267 に答える