Response.End () vs HttpContext.Current.ApplicationInstance.CompleteRequest () [duplikat]

To pytanie ma już tutaj odpowiedź:

Czy Response.End () jest uważany za szkodliwy? 8 odpowiedzi

Użytkownicy naszej aplikacji pobierają załącznik co najmniej raz na dwie sekundy w ciągu dnia.

Poprzedni scenariusz:

Używaliśmy Response.End (), aby przerwać połączenie z klientem po pobraniu przez użytkownika załącznika. Ponieważ mieliśmy problemy z wydajnością, zaczęliśmy rejestrować wyjątki, a jednym z najczęściej powtarzanych był wątek z wyjątkiem wyjątku. Odkąd otrzymujemy załącznik z usługi internetowej, musimy trochę oczyścić i mieliśmy porządek w bloku try-catch-finally. Po kilku badaniach zrozumiałem, że żaden kod po Response.End () nie zostanie wykonany, nawet jeśli jest w bloku finally. Czy to prawda?

Aktualny scenariusz:

Przeczytałem wątek w przepełnieniu stosu o Response.End (), który jest szkodliwy i musi być używany tylko wtedy, gdy jest naprawdę potrzebny, więc zdecydowałem się użyć HttpContext .... CompleteRequest () zamiast tego. Za pomocą tego kodu wymagane jest czyszczenie, ale renderowany HTML jest dołączany do pobranego załącznika. Próbowałem przesłonić Render i RaisePostBackEvent sugerowane w tym samym artykule, ale problem nadal występuje. Pomocny byłby każdy pomysł na rozwiązanie tego problemu.

Kod:

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

questionAnswers(2)

yourAnswerToTheQuestion