Pergunta

Referenciando meu Pergunta anterior, sobre o download de um arquivo de um servidor e lidar com exceções corretamente. Tenho certeza de que resolvi isso, então, de maneira clássica de programação, voltou dias depois para encontrar frustrantemente quebrado :-(


Código atualizado:

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

Isso estava funcionando bem e retornando o zip, caso contrário, se o arquivo não existia retornando 404. Então, no lado do cliente, eu poderia lidar com isso:

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

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

Mas o problema agora são duas coisas.

1) Eu recebo System.Threading.ThreadaborTexception: Thread estava sendo abortado no bloco Try-capath do lado do servidor. Normalmente, este era apenas um arquivo não encontrado exceção. Não tenho ideia do que ou por que essa nova exceção está jogando?

2) Agora que uma exceção diferente está jogando no lado do servidor, em vez do arquivo não encontrado, parece que não posso usar essa configuração para o aplicativo, porque, de volta ao lado do cliente, qualquer exceção é assumida como filenotfound.

Alguma ajuda, especialmente informações sobre por que essa ThreadaborTexception está jogando!?!? muito apreciado. Felicidades

Foi útil?

Solução

O problema é que Response.end () Lança uma ThreadABorTexception: é assim que termina a solicitação. Basta se livrar dessa chamada, você não precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top