2013-11-22 57 views
5

我是新來的asp.net 4.5異步,並在異步方法中調用response.redirect運行到以下。問題在於響應只是「掛起」其他人是否遇到過嘗試使用異步重定向的類似問題?此代碼可用於全新項目,但不適用於現有代碼中的新頁面。我確保把我能從web.config中取出的所有東西都拿出來,並刪除了我們的母版頁。打磚牆......有什麼想法?謝謝!Asp.net異步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在完成加載/渲染頁面之前做出響應。而且你並沒有同時做多件事情。順便說一句:如果你有互聯網連接,谷歌將始終工作;) –

+3

他需要異步,因爲他正在做一個I/O密集型任務(發送HTTP請求到遠程資源)。想象一下,這個資源需要很長時間才能做出迴應。在此期間,您將危害您的ASP.NET工作線程。現在想象一下,這個端點被200個用戶同時擊中=>您的站點將會死掉,因爲沒有任何工作線程可用於服務請求。這就是爲什麼在這種情況下使用異步非常重要。 –

回答

10

此代碼將在一個全新的項目工作,但是,有一個新的頁面在我們現有的代碼不能正常工作。

我假設您的現有網站已經升級到.NET 4.5。

首先要檢查的是httpRuntime.targetFramework設置爲4.5。升級時默認設置爲而不是。從評論

編輯:

另一件事來檢查(以防萬一)是Page.Async設置爲true

在這種情況下,解決方案是調用Response.Redirect("http://www.google.com", false),其明確地通過falseendResponse參數。默認值true僅用於向下兼容的原因as described here

+0

好點。我們的項目是4.5,在我們的配置中targetFramework是4.5。我們已經在十個左右的頁面中實現了異步,並且它正在工作。問題是我們的兩個頁面需要在同一響應的異步調用之後執行重定向。試圖找出測試項目和我們項目之間的差異。欣賞迴應。 – newman

+0

我幾乎不想問這個問題,但是你的'Page.Async'設置爲'true',對吧? –

+0

另一個有效的問題。是的,我願意。 – newman