s23user Ответов: 1

Сообщение об исключении: поток прерывался.


Exception Message : Thread was being aborted.

I am getting above exception when running the application in prod server. I never get that exception in dev and in test environment. 
Could any please help me out. If there is anything wrong in the code. 

My code in vb.


  Try
                    Dim filePath As String = Request.QueryString("fn")
                    Response.ContentType = ContentType
                    Response.AppendHeader("content-disposition", "attachment; filename=" + Path.GetFileName(filePath))
                    Response.TransmitFile(filePath)
                    Response.Flush()

                    System.Threading.Thread.Sleep(1000)
                    If File.Exists(filePath) Then
                        File.Delete(filePath)
                    End If

                    Response.End()
                Catch ex As Exception
                    oUtility.WriteLog("Exception Message : " + ex.Message, True)
                    vm.stat = 2
                    vm.message = "Internal server error"
                    Throw
                End Try



My code in C#

  string filePath = Request.QueryString["fn"];
                        Response.ContentType = ContentType;
                        Response.AppendHeader("content-disposition", "attachment; filename=" + Path.GetFileName(filePath));
                        Response.TransmitFile(filePath);
                        Response.Flush();

                        System.Threading.Thread.Sleep(1000);
                        if (File.Exists(filePath))
                        {
                            File.Delete(filePath);
                        }
                        //response.writefile(filepath)
                        Response.End();


Что я уже пробовал:

Я попытался запустить приложение в среде dev. У меня никогда не было этой проблемы. Я не мог воспроизвести ошибку.

1 Ответов

Рейтинг:
1

Richard Deeming

Это сделано специально:

Имитировать поведение конечного метода в ASP, этот метод пытается вызвать исключение ThreadAbortException Если эта попытка окажется успешной, вызывающий поток будет прерван, что негативно скажется на производительности вашего сайта. В этом случае код после вызова метода End не выполняется.

Снять Response.End() позвоните и замените его на Application.CompleteRequest(), как это предлагается в документации.

HttpApplication.Метод CompleteRequest (System.Web) | Microsoft Docs[^]


s23user

Сэр, реальная проблема заключается в том, что, как вы могли видеть выше, код должен загрузить файл, переданный в строке запроса. у нас есть два сервера в prod. и балансировщик нагрузки. в prod, когда мы вызываем код для загрузки файла, он не загружается, и в файле журнала я получаю это сообщение как исключение. Так не могли бы вы сказать мне, что могло пойти не так? смотрю на код. В среде разработчиков у меня никогда не было этой проблемы.

Richard Deeming

Прочтите мой ответ еще раз. Если вы позвоните Response.End, вы получите ThreadAbortException.