2

サーバーからファイルをダウンロードし、例外を適切に処理することに関して、私の以前の質問を参照してください。私はこれを解決したことを確信しており、その後、古典的なプログラミングの方法で、数日後に戻ってイライラしてそれが壊れていることに気づきました:-(


更新されたコード:

private static void GoGetIt(HttpContext context)
    {
        var directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe = new FileInfo(......);
                var name = SomeBasicLogicToDecideName();

            //if (!directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe.RefreshExists())
            //{
            //  throw new Exception(string.Format("Could not find {0}.", name));
            //}

            var tempDirectory = ""; //Omitted - creates temporary directory

            try
            {
                directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe.CopyAll(tempDirectory);
                var response = context.Response;
                response.ContentType = "binary/octet-stream";
                response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.zip", name));
                ZipHelper.ZipDirectoryToStream(tempDirectory, response.OutputStream);
                response.End();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                context.Response.StatusCode = 404;
            }
            finally
            {
                tempDirectory.DeleteWithPrejudice();
            }
        }

これは正常に機能し、zipを返しました。そうでない場合は、ファイルが存在しない場合は404を返します。クライアント側でこれを処理できます。

public bool Download()
{   
 try
                {
                    using (var client = new WebClient())
                    {
                        client.DownloadFile(name, tempFilePath);
                    }

                }
                catch (Exception)
                {
                    fileExists = false;
                }
return fileExists;
    }

しかし、今の問題は2つのことです。

1)System.Threading.ThreadAbortExceptionが発生します:サーバー側のtry-catchブロックでスレッドが中止されていました。通常、これはファイルが見つからないという例外でした。その新しい例外が何を、またはなぜスローしているのかわかりません。

2)ファイルが見つからない代わりにサーバー側で別の例外がスローされているため、この設定をアプリケーションに使用できないようです。クライアント側に戻ると、例外はfilenotfoundであると見なされるためです。

ヘルプ、特にこのThreadAbortExceptionがスローされる理由に関する情報!?!?大変感謝しております。乾杯

4

1 に答える 1

3

問題は、Response.End()が ThreadAbortException をスローすることです。これが、リクエストを終了する方法です。その呼び出しを完全に取り除くだけで、必要ありません。

于 2010-03-30T03:21:29.750 に答える