Asp.Net Range-Specific Requests ThreadAbortException Thread был прерван

Я использую класс по адресу http://pastebin.com/aK0zcxMN (версия http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx), чтобы защитить загрузки от кражи и обеспечить возобновление. Он отлично работает, но время от времени я получаю

System.Threading.ThreadAbortException: Thread was being aborted.
at System.Web.UnsafeNativeMethods.EcbFlushCore(IntPtr pECB, Byte[] status, Byte[] header, Int32   keepConnected, Int32 totalBodySize, Int32 numBodyFragments, IntPtr[] bodyFragments, Int32[] bodyFragmentLengths, Int32 doneWithSession, Int32 finalStatus, Int32 kernelCache, Int32 async, ISAPIAsyncCompletionCallback asyncCompletionCallback)
at System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.FlushCore(Byte[] status, Byte[] header, Int32 keepConnected, Int32 totalBodySize, Int32 numBodyFragments, IntPtr[] bodyFragments, Int32[] bodyFragmentLengths, Int32 doneWithSession, Int32 finalStatus, Boolean& async)
at System.Web.Hosting.ISAPIWorkerRequest.FlushCachedResponse(Boolean isFinal)
at System.Web.Hosting.ISAPIWorkerRequest.FlushResponse(Boolean finalFlush)
at System.Web.HttpResponse.Flush(Boolean finalFlush)
at System.Web.HttpResponse.Flush()
at ResumeDownload.ProcessDownload(String fileName, String headerFileName, String fileMimeType)
at FileDownloader.Page_Load(Object sender, EventArgs e)

Мой сайт предназначен для мобильных устройств, и существует множество различных мобильных браузеров с разными подходами к загрузке. Они также обычно подключаются через шлюз оператора, поэтому я предполагаю, что это как-то связано с отключением клиента или проблемой wap-прокси.

Что я пытаюсь сделать, так это то, как я могу остановить это. Я не хочу пытаться поймать и игнорировать это. я читал о

catch (ThreadAbortException ex)

а также

Thread.ResetAbort();

но не смог успешно реализовать его в классе. Кто-нибудь использовал подобный код для защиты от пиявки?


person nLL    schedule 03.07.2010    source источник


Ответы (1)


если вы используете

Response.Redirect("Some URL");

тогда попробуй это

Response.Redirect("Some URL",false);

В этом случае ответ не закончится, и вам не нужно обрабатывать его с помощью блока catch. Но убедитесь, что ваш поток не будет мешать.

person Abhishek Dhanotia    schedule 28.06.2011