Gli utenti della nostra applicazione scaricano un allegato almeno una volta in due secondi durante il giorno.Response.End() vs HttpContext.Current.ApplicationInstance.CompleteRequest()
scenario precedente:
Stavamo usando Response.End() per interrompere la connessione al client dopo l'utente scarica un allegato. Poiché abbiamo riscontrato problemi di prestazioni, abbiamo iniziato a registrare le eccezioni e una delle più ripetute era l'eccezione di interruzione del thread. Dal momento che stiamo ottenendo l'allegato da un servizio web, dobbiamo fare un po 'di pulizia e abbiamo ripulito il blocco try-catch-finally. Dopo alcune ricerche, ho capito che qualsiasi codice dopo Response.End() non verrà eseguito anche se è in un blocco finally. È giusto?
Scenario attuale:
ho letto il filo in overflow dello stack su Response.End() essendo dannosa e che deve essere utilizzato solo quando è realmente necessario, così ho deciso di utilizzare HttpContext ... .CompleteRequest() invece. Con questo codice, la pulizia è necessaria, ma l'HTML che viene reso viene aggiunto all'allegato scaricato. Ho provato a sovrascrivere il Render e RaisePostBackEvent suggerito nello stesso articolo ma il problema persiste ancora. Qualunque idea su come risolvere questo problema sarebbe utile.
Codice:
HttpContext.Current.Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" +
filename);
Response.AddHeader("Content-Length", fileContent.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fileContent);
Response.Flush();
Si prega di non prefisso i titoli con "C#" e così via. Ecco a cosa servono i tag. –
Sicuro. Mi dispiace per quello Ho appena iniziato a postare qui. Mi assicurerò di non ripeterlo. – user1396468