2013-11-22 3 views
5

asp.net 4.5 async를 처음 사용했으며 async 메서드 내에서 response.redirect를 호출하여 다음을 실행했습니다. 문제는 응답이 "멈춤"입니다. 비동기로 리디렉션을 시도 할 때 비슷한 문제가 발생한 경험이 있습니까? 이 코드는 새로운 프로젝트에서 작동하지만 기존 코드의 새 페이지에서는 작동하지 않습니다. 우리 web.config에서 모든 것을 제거하고 마스터 페이지를 제거했습니다. 벽돌 벽을 때리면 ... 어떤 생각? 감사!Asp.net async와의 Response.Redirect 문제

protected void Page_Load(object sender, EventArgs e) 
    { 
     RegisterAsyncTask(new PageAsyncTask(PageLoadAsync)); 
    } 

    private async Task PageLoadAsync() 
    { 
     var data = await GetData(); 

     if (data == HttpStatusCode.OK) 
      Response.Redirect("http://www.google.com"); 
    } 

    private async Task<HttpStatusCode> GetData() 
    { 
     using (var client = new HttpClient()) 
     { 
      var response = await client.GetAsync("https://www.google.com"); 
      return response.StatusCode; 
     } 
    } 
+1

비동기 스레드에서'Redirect'를 실행할 수 있다고 생각하지 않습니다. –

+0

왜 비동기가 필요한지 모르겠지만 HttpClient가 페이지로드/렌더링을 완료하기 전에 응답 할 때까지 기다려야합니다. 그리고 당신은 동시에 여러 가지 일을하지 않습니다. btw : 인터넷에 연결되어 있으면 google이 항상 작동합니다.) –

+3

그는 I/O 집약적 인 작업 (원격 요청에 HTTP 요청 보내기) 때문에 비동기가 필요합니다. 이 리소스가 응답하는 데 오랜 시간이 걸린다 고 상상해보십시오. 이 시간 동안 ASP.NET 작업자 스레드를 위험에 빠뜨릴 수 있습니다. 이제이 엔드 포인트에 200 명의 사용자가 동시에 방문한다고 가정 해보십시오. 요청을 처리 할 수있는 작업자 스레드가 없으므로 사이트가 죽을 것입니다. 그래서이 경우 비동기를 사용하는 것이 매우 중요합니다. –

답변

10

이 코드는 새로운 프로젝트에서 작동하지만, 기존 코드에 새로운 페이지 작동하지 않습니다.

기존 사이트가 이미 .NET 4.5로 업그레이드되었다고 가정합니다.

먼저 확인할 내용은 httpRuntime.targetFramework4.5으로 설정되어 있습니다. 업그레이드 할 때 이 아니라이 기본적으로 설정되어 있지 않습니다. 댓글에서

편집 :

또 다른 것은 (단지의 경우)를 확인하기는 Page.Asynctrue로 설정되어 있다는 점이다.

이 경우 해결 방법은 endResponse 매개 변수에 명시 적으로 false을 전달하는 Response.Redirect("http://www.google.com", false)을 호출하는 것이 었습니다. true의 기본값은 하위 호환성 이유로 인해 as described here입니다.

+0

좋은 지적입니다. 우리 프로젝트는 4.5이고 targetFramework는 4.5입니다. 우리는 지금 10 페이지 정도의 비동기를 구현했으며 작동 중입니다. 문제는 두 페이지가 동일한 응답에서 비동기 호출 후 리디렉션을 수행해야한다는 것입니다. 테스트 프로젝트와 프로젝트 사이의 차이점을 지금 파악하려고합니다. 응답을 감사하십시오. – newman

+0

나는 이것을 묻는 것이 거의 싫지만,'Page.Async'를'true'로 설정 했습니까? –

+0

다른 유효한 질문입니다. 네 저도 그렇습니다. – newman