2009-11-08 2 views
0

파일 업로드를 모니터링하기 위해 진행률 표시 줄을 구현하려고합니다. 파일은 iframe에 업로드되고 서버 측 C# 코드 숨김 파일을 청크로 업로드하는 버퍼를 구현합니다. while 루프를 사용하여 이것을 수행하고 업로드 성능은 ASP.NET 3.5에서 정상적으로 보이고 제 3 자 컨트롤이나 복잡한 업로드 구성표를 사용하고 싶지 않습니다. 처리가 while 루프를 통과 할 때마다 세션 변수를 처리 한 바이트 수와 전체 파일 크기로 업데이트합니다.ASP.NET 세션 변수 - 파일 업로드로 작성 - XMLHttpRequest로 다른 페이지로 읽기

iframe 업로드 양식 제출을 구현하는 버튼은 XMLHttpRequest를 다른 asp.net 페이지로 사용하는 함수에 Javascript setInterval (...)을 시작하고 해당 세션 변수를 읽는 기능이 있습니다. Response.Write 그들. 이것들은 콜백 함수로 반환되어야하며 진행률 표시 줄을 업데이트하는 데 사용됩니다.

개념적으로 이것은 작동하고 흐름이 가능합니다. 업로드 작업을 중단하고 '핑'페이지에 다른 중단 점을 넣으려면 업로드 처리기에 중단 점을 넣어서이 사실을 알고 있습니다. 나는 디버거에서 앞뒤로 갈 수 있고 세션 변수가 설정되고 읽히는 것을 볼 수있다.

불행히도, 이것은 중단 점 없이는 실제로 제대로 작동하지 않습니다. ping 페이지가 나가서 돌아 오지 않습니다. 이것은 업로드가 끝날 때까지 발생합니다. 어느 지점에서 최종 결과가 나오는지 행복하게 해결할 것입니다.

이 두 페이지는 별도의 페이지 요청이므로 동일한 세션 변수를 사용하려는 두 개의 개별 스레드라고 가정합니다. IIS에 의해 생성되기 때문에 이러한 스레드에 대한 핸들이 없습니다. 업로드 프로세스는 세션 변수를 너무 많이 사용하여 핑 페이지에서 가져올 수 없습니다. 또한, 나는 시스템을 브라우저와 IIS를 모두 잠궈 버렸습니다. 스레드 동기화에 대해 읽으려고했지만 핸들이없는 스레드간에 구현하기에 충분하지 않습니다.

누구든지 친절하게도이 작업을 수행하는 방법에 대한 C# 코드를 보여줄 수 있습니까? 예제 코드를 찾을 수는 있지만 모두 두 개의 스레드를 생성하므로 핸들이 있습니다. 페이지 중 하나에서 현재 스레드를 가져올 수 있지만 페이지는 서로의 스레드에 액세스 할 수 없습니다.

고마워요!

답변