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%ダウンロード成功する ・ω・
Comments