Webシステムにデータをユーザ毎にファイルを指定し、ファイルをダウンロードする処理があります。
(「現在のダウンロードの処理」を参照)
そのダウンロード処理は、Responseを使用して実行しているのですが、このダウンロード処理がたまに(1~5%位?)なぜか失敗してしまいます。
その為、「試みた対応」1~5)のようにダウンロードの処理を変更してみたのですが、既存のダウンロード処理が原因不明の失敗を起こした時にはどのダウンロード処理も同様に失敗してしまいます。
その為、ダウンロード処理の形を変更したいと思うのですが、どのようにすればよいでしょうか?
(もしくは原因不明のダウンロード処理失敗の原因を探る調査方法でもかまわないです。通信も疑っているのですが、通信が悪いといえる材料もないので処理を変更する方向で考えています。)
■現在のダウンロードの処理
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(downloadFilepath), Encoding.UTF8));
Response.AddHeader("Content-Length", new System.IO.FileInfo(downloadFilepath).Length.ToString());
Response.TransmitFile(DldModel.strImageSavePlace.Trim());
Response.End()
■試みた対応
1)「Response.End();」を以下のように変更
HttpContext.Response.Flush();
HttpContext.Response.SuppressContent = true;
HttpContext.Response.End();
2)「Response.End();」を以下のように変更
HttpContext.Response.Flush();
HttpContext.Response.SuppressContent = true;
HttpContext.ApplicationInstance.CompleteRequest();
3)「Response.End();」を以下のように変更
Response.Flush();
4)「Response.End();」を以下のように変更
HttpContext.Response.End();
5)ダウンロード処理自体を以下のように変更
return File( path , "application/octet-stream", file );
■その他
〇あるユーザーは全くダウンロードできなくなっている時に、他のユーザはダウンロードできている、という場合も有。
〇処理側で拾えるログは、「リモート ホストは接続を終了しました。エラー コードは 0x800703E3 です。」くらい。ダウンロードのセッションが切れる/消滅している?
〇ダウンロードファイルのサイズは800M位。
〇ダウンロードエラーが発生してしまう時にCPU、メモリ等の異常は特にみられない
〇ダウンロードエラーが発生している時、他の処理は通常通り動作&異常は発生していない。
〇ダウンロードエラーが発生している時、キャッシュのクリアはしている。
回答2件
あなたの回答
tips
プレビュー