Frage

Referenzierung meine frühere Frage , in Bezug auf eine Datei von einem Server herunterzuladen und Ausnahmen richtig Handhabung. Ich bin sicher, dass ich dieses Problem gelöst hatte, dann in der klassischen Programmierung Mode, kehrte Tage später frustrierende finden es geschrotet: - (


Aktualisiert Code:

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();
            }
        }

Das funktioniert gut, und die Zip-Rückkehr, sonst, wenn die Datei nicht vorhanden war 404. Dann auf der Client-Seite zurückkehrt ich damit umgehen könnte:

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

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

Aber das Problem ist jetzt zwei Dinge.

1) I get System.Threading.ThreadAbortException: Thread wurde in der Server-Seite try-catch-Block abgebrochen werden. Normalerweise war dies nur eine Datei nicht gefunden Ausnahme. Ich habe keine Ahnung, was oder warum die neue Ausnahme wirft?

2) Nun, da eine andere Ausnahme auf der Serverseite wirft anstelle der Datei nicht gefunden, so scheint es, kann ich diesen Satz für die Anwendung nicht verwenden, denn wieder auf Client-Seite, jede Ausnahme davon ausgegangen wird, dass filenotfound.

Jede Hilfe, vor allem Informationen darüber, warum dieser Threadabort wirft!?!? sehr geschätzt. Prost

War es hilfreich?

Lösung

Das Problem ist, dass Response.End () wirft einen Threadabort: das ist, wie es die Anforderung endet. Erhalten Sie einfach loswerden diesen Anruf überhaupt, Sie brauchen es nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top