2009-07-27 20 views
3

我有一個長時間運行的服務器端進程(作爲do/while循環的一部分,通過批處理的web服務獲取數據)。在每次通過循環時,我想將狀態消息推回客戶端更新面板中的標籤控件。長時間運行的服務器進程更新客戶端的標籤。 AJAX ASP.Net

我已經嘗試將值分配給代碼後面的標籤,然後使用計時器控件每分鐘刷新更新面板。但這似乎並不奏效。

任何想法或建議嗎?

TIA

回答

1

我建議使用一個簡單的jQuery.get調用一個網頁,可能是由一個session變量的方式從你的服務器端程序讀取狀態。然後客戶會提出請求。失敗的原因在於,您的服務器端嘗試從服務器端將內容推送到客戶端(強制更新),因爲長時間運行的進程將繼續運行。據我所知,你不能通過http來推動你的想法......請求必須由瀏覽器完成!

+0

這與我正在下降的路線類似。但是這個問題似乎與長時間運行的進程(循環)進行時(由onclick事件觸發)相關,後面的代碼忙於循環工作,無法處理狀態請求。 我不像我想要的那樣熟悉jQuery,所以我會探索這個選項。我也可能需要探索線程和產生並行線程。 感謝您的意見。 – 2009-07-28 15:02:23

0

您可能會考慮稍微不同的方法。

首先,擺脫計時器。然後使用Response.Write輸出您在過程中的位置。 I.E .:處理項目編號234

在response.write之後,做一個Response.Flush。這會強制服務器將當前緩存的響應對象寫入瀏覽器。

+0

這只是將文本推送到響應流。我需要更多地控制這些信息在哪裏以及如何顯示。 (讓它看起來很漂亮,你知道。) 謝謝 – 2009-07-28 15:16:49

1

您的評論正在譯文。考慮在單獨的線程中產生工作並通過會話/緩存跟蹤其進度。你甚至可以更進一步,將任務及其所有線程邏輯封裝到LongRunningTask類中,並在您的輪詢代碼中檢查((LongRunningTask)Cache["MyLongRunningTask"]).TaskStatus或沿着這些行的東西(當然 - 不要使用確切的代碼來檢索狀態=))

0

讓你的服務器進程寫和沖洗一

<script> 
    /* jquery to update an element on the client page */ 
</script> 

當前狀態來更新頁面上的元素。你可能需要用空格來填充它,這樣可以增加足夠的字節以正確刷新(比如說1000字節)。即使在這之後,它也可以出來。您的客戶可能會遇到一些問題,如果腳本標記內的內容非常冗長,並且您有很多更新,但是如果您只保留一小部分更新,它應該沒問題。 ..通過百分之十),否則最終輸出的文件大小可能在高兆字節範圍內。

相關問題