私たちのアプリケーションのユーザーは、日中に少なくとも2秒に1回添付ファイルをダウンロードします。
前のシナリオ:
ユーザーが添付ファイルをダウンロードした後、Response.End()を使用してクライアントへの接続を中止していました。パフォーマンスの問題が発生したため、例外のログ記録を開始しました。最も繰り返されたものの1つは、スレッドアボート例外でした。Webサービスから添付ファイルを取得しているため、クリーンアップを実行する必要があり、try-catch-finallyブロックでクリーンアップを実行しました。調査の結果、Response.End()以降のコードはfinallyブロックであっても実行されないことがわかりました。そうですか?
現在のシナリオ:
Response.End()が有害であり、本当に必要な場合にのみ使用する必要があるというスタックオーバーフローのスレッドを読んだので、代わりにHttpContext .... CompleteRequest()を使用することにしました。このコードを使用すると、必要なクリーンアップが実行されますが、レンダリングされたhtmlは、ダウンロードされた添付ファイルに追加されます。同じ記事で提案されているRenderとRaisePostBackEventをオーバーライドしようとしましたが、問題は解決しません。この問題を解決する方法についてのアイデアは役に立ちます。
コード:
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();