2015-01-14 4 views
2

MVC 프로젝트가 있습니다. 내 뷰에서 다운로드 가능한 파일을 반환하는 내 컨트롤러의 메서드 링크가 있습니다.Javascript는 C# 메서드에서 진행합니다.

내 메서드는 다양한 API에서 데이터를 다운로드하고 데이터를 파일로 처리합니다. 이 방법은 완료하는 데 10 ~ 15 분이 걸립니다.

내보기에서 진행 상황을 표시하고 싶습니다. 어떻게하는 것이 가장 좋습니까? 내 메서드에서 설정하는 내 컨트롤러에서 전역 변수를 사용해야하며 이러한 값을 얻기 위해 async javascript 루프를 사용합니까?

API를 요청에서 진행을 얻을 수있는 좋은 방법은, 내가 다음 그 방법 사용할 수 있습니까 : 정말 긴 프로세스를 실행하기위한

var httpWebRequest = (HttpWebRequest)WebRequest.Create(DataValues.xx + "url/" + label + "/" + UUID + "?action=" + act); 
    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.Method = "PUT"; 
    httpWebRequest.Credentials = new NetworkCredential(DataValues.user, DataValues.password); 
    httpWebRequest.PreAuthenticate = true; 
+2

상태를 세션 변수에 저장하고 상태를 쿼리 한 다음 x 초마다 ajax를 사용하여 뷰를 업데이트하십시오 .-) –

+2

API 메소드는 주기적으로 상태를 (백분율이나), jQuery에서 업데이트 (또는 HTML5를 사용하는 경우 서버에서 보낸 이벤트 활용)를 폴링해야합니다. – mattytommo

답변

1

를, 상태 업데이트를 다시 보내 SignalR 같은 것을 사용하여 고려할 수 .

그래서 - 오히려 파일을 요구하는 링크를 클릭 (브라우저가 응답을 기다리는 10 분 동안 거기에 앉아 가짐) 당신은 할 수있는 것보다 :

  1. 내가 원하는 "MVC의 컨트롤러를 파고 링크 이 때 알려주십시오
    "(신호의 측면을 연결합니다)
  2. 서버 프로세스 다운로드 콘텐츠 - 트랙을 유지하면 얼마 남지 않았고 방송 진행률은 입니다. ..
  3. 브라우저 측 signalR이이 브로드 캐스트를 사용합니다 ("xb ytes found "또는 유사 - 예 : '많이 했어요') - 그에 따라 업데이트를 봅니다.
  4. 일단 프로세스가 완료되면 서버 브로드 캐스트는 "모든 작업을 완료하고 가져 와서"브라우저가 결과를 다운로드하는 곳으로 보냅니다.

(마지막 비트에서는 signalR을 통해 발견 된 콘텐츠를 직접 전송할 수도 있지만 데이터 제한/제약 크기와 관련된 문제가 발생할 수 있습니다).

HTH

0

는 signalr으로 가능하지만, XSockets 같은 자신의 장기 실행 컨트롤러를 사용하는 것이 더 적합 소리가 있습니다. 우선이 프로세스는 매우 오래 실행되지만, 상태/정보가있는 특정 클라이언트에 데이터를 보낼 수 있기 때문에 우선적으로 처리해야합니다. http://xsockets.net/docs/4/controllers

또 다른 이유는 XSockets가 신호기가 아닌 이진 데이터를 지원한다는 것입니다. XSockets 최신 버전은 상업용이지만 이전 버전은 무료라고 생각합니다.