2011-05-09 3 views
2

시나리오 :ASP.NET에서 브라우저 시간 제한을 방지하는 방법은 무엇입니까?

사용자가 1000 단위 작업으로 ASP.NET 4.0 응용 프로그램에 작은 파일 또는 약 100KB를 업로드합니다. 그런 다음 서버는 작업 단위 (UOW)에서 한 번에 하나씩 작업하게됩니다. 외부 서비스에서 정보를 요청하기 때문에 각 장치를 완료하는 데 몇 초가 걸립니다. 트랜잭션을 사용하여 모든 단위가 성공적으로 완료된 경우에만 결과가 데이터베이스에 저장됩니다. 완료되면 사용자는 수행 된 작업의 목록을 가져올 수 있습니다.

문제는 사용자가 확인을 얻지 못하는 대신 브라우저가 시간 초과로 인해 포기한 것입니다.

향후 파일은 100 배 정도 더 커져서 문제가 증가 할 것으로 예상됩니다.

이 시간 초과를 방지하고 싶습니다.

여기에 내가 가진 몇 가지 아이디어입니다 :

  1. 최적화 코드가 빠르게 실행합니다. 이것은 완료되었으며 더 이상 문제가되지 않습니다.
  2. 외부 서비스에 대한 요청을 병렬로 실행하십시오.
  3. 서버 시간 초과를 약간 늘리십시오.
  4. 사용자가 파일을 업로드하도록 한 다음 파일 처리가 끝난 결과가 포함 된 이메일을 보내도록합니다.
  5. 대기 중 (예 : 5 % 완료 - 10 분 내에 완료) 진행 정보를 사용자에게 보여줍니다.

진행률 정보를 표시하고 브라우저 시간 초과를 방지하려면 어떻게해야합니까?

기타 제안을 환영합니다.

감사합니다.

+0

나는 비슷한 질문을 며칠 전에 보냈다 : http://stackoverflow.com/questions/5871646/add-a-realtime-progress-update-to-a-slow-page-in-asp-net/5871947 # comment-6770037 –

답변

2

데이터를 데이터베이스에 대기열에 넣습니다. 그런 다음 비동기 프로세스 (예 : Windows 서비스)를 사용하여 항목을 큐에서 가져 와서 처리합니다. 각 작업의 진행률로 DB를 업데이트 할 수 있으며 전체 작업이 완료되면 대기열에서 항목을 제거하고 다른 테이블을 업데이트 할 수 있습니다.

진행할 때 사용자는 대기열 테이블에 업로드 상태를 쿼리 할 수 ​​있습니다.

0

쉬운 속임수는 javac 스크립트를 작성하여 현재 페이지에서 무언가를 반복적으로 요청하는 것입니다. HEAD의 요청 조치를 사용하면 서버는 매회 최소한의 정보 만 응답합니다. 당신은 브라우저 응답에서 파일을 처리 분리 필요

<script src="/js/jquery-1.3.2.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
setTimeout("callserver()",6000); 
}); 

function callserver() { 
var remoteURL = '/yourpage.aspx'; 
$.get(remoteURL, function(data) { setTimeout("callserver()",6000); }); 
} 
</script> 
4

: 같은

뭔가. 이것은

  • 지속적인 항목을 작성함으로써 달성된다 (즉,큐에서 데이터베이스, 파일 등)에 있도록이 잘못 브라우저
  • 에 큐 노동자를 만들기 비동기 공정 대기열에 허용
  • 반환 성공의 결과입니다.
관련 문제