在我的應用程序中,我通過上傳XML文件開始導入過程。上傳完成後,將運行一系列存儲過程並解析xml文件,並將數據插入許多不同的表中。隨着進展,將更新Stats
表以顯示插入的進度。表格有4列:BatchId
,BatchCount
,ProcessCount
和ErrorCount
。 BatchCount
是所有記錄的計數。如果記錄插入正確沒有問題ProcessCount
增加1,如果失敗ErrorCount
增加1.(這兩列在導入過程中總是變化)SignalR輪詢並不總是返回準確的數據庫結果
我的主要目標是顯示導入進度使用SignalR 。我有一箇中心輪詢方法,因爲我在用戶界面中看到更新的時間戳。然而,問題在於計數值總是爲0(初始值),或者非常偶爾會讀取一次,並顯示一些像985這樣的隨機數。如果它讀取了一個值,它只會執行一次,而不會再次更改。這裏是我的樞紐方法:
public void BeginPolling()
{
while (true)
{
var stats = _repository.GetImportStats();
var message = "Preparing file...";
if (stats != null)
{
message = DateTime.Now + " - Count: " + stats.ProcessCount.ToString();
}
else
{
message = DateTime.Now + " - Stats result returned null.";
}
//the message displays in a div on my UI
Clients.Caller.showProgress(message);
//I have tried various sleep times (1000, 5000, 10000)
Thread.Sleep(5000);
}
}
下面是我的_repository.GetImportStats
方法,用於測試目的,只是抓住一個(也是唯一)記錄:
public Stats GetImportStats()
{
return DataContext.Stats.FirstOrDefault();
}
同樣的測試,我試圖只是把一個按鈕在我的用戶界面,使ajax調用相同的GetImportStats()
方法,它總是返回ProcessCount
就好,所以我認爲問題在於我的SignalR實現。任何幫助表示讚賞!
標記爲解決眼前的問題的答案,但也提供了有關halter73答案的有用建議。 – Goose