2013-10-18 40 views
1

我想弄清楚如何使ASP.net MVC 4在長時間運行期間將數據發回給瀏覽器。因爲我以前從未做過這種已經,我開始用一個簡單的例子:如何在ASP.net MVC 4中將文本流式傳輸到瀏覽器?

public void Index() 
{ 
    Response.Write("<p>Hello, world! Counting to 5!</p>"); 
    for (int i = 0; i < 5; i++) 
    { 
     Thread.Sleep(1000); 
     Response.Write("<p>" + i + "</p>"); 
     Response.Flush(); 
    } 
} 

我認爲此代碼應立即發送「你好,世界數到5!」到瀏覽器,然後每秒鐘發送一位數字,直到達到五位。

但是,當我運行此代碼時,它需要五秒鐘,並且所有文本一次輸出。

我認爲Response.Flush()方法應該允許您增量發送數據到瀏覽器。

我該如何做這項工作?

回答

2

我找到了我的問題的答案。

首先,如果Internet Explorer沒有看到文檔是有效的HTML,它就不會流式傳輸文本。我添加了代碼來打印出我的數據的準系統HTML頁面,這似乎使它工作。

另一位作者在這裏寫道:http://encosia.com/easy-incremental-status-updates-for-long-requests/ Internet Explorer會自動緩衝輸入的前256個字符,因此建議在開始時輸入256個字符的丟棄數據,但這似乎沒有什麼區別我正在使用的版本(IE 10)。

最後,我只算四個,因爲我是關閉的一個;-)

這是我的工作代碼:

public void Index() 
{ 
    Response.Write("<!DOCTYPE html><html><head><title>Test</title></head><body>"); 

    Response.Write("<!--"); 
    Response.Write(new string('*', 256));    
    Response.Write("-->"); 
    Response.Flush(); 

    Response.Write("<p>Hello, world! Counting to 5!</p>"); 
    for (int i = 1; i <= 5; i++) 
    { 
     Response.Flush(); 
     Response.Write("<p>" + i + "</p>");     
     Thread.Sleep(1000); 
    } 
     Response.Write("</body></html>"); 
} 
相關問題