Response.End()をtry/catch しても Internal Server Error が出る問題の解決

try{
  Response.WriteFile(strFullPath );
  Response.Flush();
  Response.Close();
  Response.End();
} catch (System.Threading.ThreadAbortException)

//
}
catch (Exception except)
{
    log.Warning("ダウンロード失敗", except);
} finally{
//
}

みたいなコード書いたんですが、なんかランダムに 500 Internal Server Error
がでてまともに動かなかったので、試行錯誤してみた・ω・

ちなみに、httpd のログには
command failed: failed to send file (file data)
なるログが・・・これは明らかにmonoのログ…

try{
  Response.WriteFile(strFullPath );
  System.Threading.Thread.Sleep(1);
  HttpContext.Current.Response.End();
}
catch (System.Threading.ThreadAbortException)
{
  HttpContext.Current.Response.Flush();
  HttpContext.Current.Response.Close();
  HttpContext.Current.Response.SuppressContent = true;
  HttpContext.Current.ApplicationInstance.CompleteRequest();
  System.Threading.Thread.Sleep(1);
}
catch (Exception except)
{
    log.Warning("ダウンロード失敗", except);
}
finally {
//
}

たどり着いた結論。
これだと100%ダウンロード成功する ・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です