제 작업 자리에는 다음 코드를 사용하여 파일 다운로드를 수행하는 ASP.NET 페이지가 있습니다. 파일이 zip 아카이브에서 직접오고 있기 때문에 Request.TransmitFile() 대신이 파일을 사용합니다. 큰 다운로드에 대한 httpRuntime 실행 제한 시간 구성
private void DownloadStream(Stream stream)
{
int bytesRead;
int chunkSize = 1048576; //1MB
byte[] readBuffer = new byte[chunkSize];
while ((bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
if (!Response.IsClientConnected)
break;
Response.OutputStream.Write(readBuffer, 0, bytesRead);
Response.Flush();
}
}
은 내가 httpRuntime을 executionTimeout에 설정을위한 합리적인 값을 결정하기 위해 노력하고있어. 전송되는 파일의 크기는 최대 1GB이며, 일부 사용자는 웹 서버에 대해 매우 느린 파이프
*을 가지고 있습니다 (64K 라인을 생각하십시오). 이러한 사용자는 연결 재설정을 경험하지 않아도됩니다. 그러나 나머지 사이트에 대해서는 합당한 시간 초과 값을 유지하려고합니다.
이 특정 페이지에 대해 의 executionTimeout 설정을 정의하는 방법이 있습니까? (또는 해당 페이지를 특별히 무제한으로 만들 수 있습니까?) 권장되는 접근 방식은 무엇입니까? 우리는 아마도 파일을 제공하는 완전히 다른 방법 (예 : FTP)을 사용하는 편이 나을지도 모르지만 그 선택을 할 자유가 없습니다. 우리가 할 수있는 일은 사이트 코드를 수정하는 것뿐입니다.
또한 해야합니까 보내기 전에 이러한 다운로드를 압축해야한다고 생각하지만 다른 문제입니다.
* 주제 외의 질문 : "느린 파이프"는 성가신 혼합 은유입니까? 나는 아마도 "작은 파이프"라고 대신 말해야하지만,이 맥락에서 나에게 이상하게 들린다. 의견?
를 사용하고 있기 때문에 여기에 몇 가지 좋은 사례가 있는데, 1KB의 청크에 어떻게 도착 했습니까? 85KB보다 큰 항목은 큰 개체 힙에 저장되기 때문에 어떻게 말했습니까? – user420667
@ user420667 기억하기에는 너무 길었습니다. 6 년 전 나는 그 선택이 자의적이라고 말할 수 있습니다. – Odrade