2013-08-21 1 views
0

백그라운드에서 URL에서 서버로 파일을 다운로드 할 수있는 방법이 있습니까? 양식이 제출되면 파일 업로드가 백그라운드에서 자동으로 처리되므로 사용자는 파일 업로드를 기다릴 필요가 없습니다.백그라운드에서 ASP.NET 처리

Windows 응용 프로그램에는 BackgroundWorker 클래스가 있습니다. 그러나 ASP.NET은 어떻습니까?

+1

그렇게해서는 안됩니다. IIS는 언제든지 ASP.Net AppDomains를 언로드 할 수 있습니다. 별도의 프로세스를 사용하십시오. – SLaks

+0

이 스레드는 문제와 해결책에 대한 좋은 요약을 제공해야한다고 생각합니다. http://stackoverflow.com/q/12319642/1236044 – jbl

+0

백그라운드 스레드는 asp.net에서 문제가 있습니다. Azure에서는 웹 작업을 사용할 수 있습니다. http://curah.microsoft.com/52143/using-the-webjobs-feature-of-windows-azure-web-sites – RickAndMSFT

답변

2

이것은 응답 스레드에서 실행하고 싶은 일이 아닙니다. 파일을 다운로드하고 처리 할 때까지 사용자에게 응답을 지연시키기 때문입니다. 이러한 항목을 수행 할 컴퓨터 (또는 Azure Worker Role)의 서비스로 실행되는 다른 스레드에 더 적합합니다.

그러나 실제로 IIS/ASP.net을 통해 실행하려면 (또는 실행해야하는 경우) 사용자에게 아무것도 반환하지 않으려면 모든 스레드를 다른 스레드에서 실행하거나 비동기 적으로 호출 된 대리자를 통해. 대리자를 비동기 적으로 실행하는 예제는 this answer (인용문)을 참조하십시오.

private delegate void DoStuff(); //delegate for the action 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //create the delegate 
    DoStuff myAction = new DoStuff(DownloadStuff); 

    //invoke it asynchronously, control passes to next statement 
    myAction.BeginInvoke(null, null); 
} 

private void DownloadStuff() { 
    // your functionality here - this can also go in a code library 
} 

은 (정보를 전달하는 매개 변수를 사용하여 포함) 대표와 함께 작동하는 방법에 대한 자세한 정보를 원하시면 MSDN를 참조하십시오.

+1

을 참조하십시오. 또한 미리 알림으로 사용할 수있는 컨텍스트 인스턴스가 없으므로 객체 또는 해당 속성 값은 스레드 시작 매개 변수와 함께 전달되어야합니다. 여기에는 HttpContext.Current가 포함되며 세션, 요청, 응답, 응용 프로그램 등이 포함됩니다. – ps2goat

관련 문제