2010-06-29 3 views
1

TransmitFile을 사용하여 파일을 보낼 때마다 파일이 완료 될 때까지 사용자가 차단됩니다. IOW, 사용자는 사이트를 탐색 할 수 없습니다.ASP.NET TransmitFile로 인해 사이트가 차단됨

사용자가 전송을 취소하면 사이트가 시간 초과되거나 데이터 전송이 완료 될 때까지 계속 차단됩니다. 어느 것을 알 수는 없지만, 예를 들어 다운로드를 시작한 직후에 30MB 파일을 취소하면 10MB 파일보다 복구하는 데 시간이 더 걸립니다.

다음은 관련 코드입니다 :

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", contdisp); 
Response.AddHeader("Content-Length", new FileInfo(fullfilename).Length.ToString()); 
Response.TransmitFile(fullfilename); 
Response.Flush(); 

답변

2

이 문제를 파악하고 더 나은 내가 다시이 문제를 얻거나 다른 사람이이 문제를 가지고 케이스에 게시 할 수 있습니다.

이 문제는 내 페이지에서 세션 데이터를 사용하기 때문에 발생합니다. 내 다운로드 페이지에는이 세션 데이터가 있어야 정렬, 검색 용어 등의 특정 정보를 기억할 수 있습니다. 페이지가 파일을 표시하고 단추를 클릭 할 때 위의 코드를 실행한다는 점에 유의해야합니다.

이 때문에 다운로드 코드 (위의 스니 펫)가 실행되면 세션 데이터가 손상되지 않도록 IIS에서 전송을 보호합니다. 이는 정상적인 페이지 네비게이션이 있어야하지만 분명히 파일 전송을 원하지 않는 경우입니다.

다운로드 코드를이 페이지 밖으로 이동하고 세션 데이터가없는 코드로 이동하면 사용자가 행복하게 사이트를 탐색하는 동안 다운로드가 발생할 수 있습니다.

또한 이라는 새 다운로드 페이지를 Page 지시문에 추가하여 세션을 사용하지 않도록했습니다.