2013-02-07 27 views
1

我有一個我用​​v1.7構建的工作者角色。在我的開發機器上,以及我的計算模擬器,應用程序工作正常。但是,當我部署到Azure時,表存儲操作會自動失敗。代碼如下 - 在BackupResult類繼承自TableServiceEntity爲什麼Azure表存儲操作會默默失敗?

Trace.WriteLine("Entering cloud storage method"); 
CloudTableClient client = storageAccount.CreateCloudTableClient(); 
Trace.WriteLine("Got the client..."); // Last message received. 
client.CreateTableIfNotExist("LastRun"); 
Trace.WriteLine("Created the table (maybe)..."); 
TableServiceContext context = client.GetDataServiceContext(); 
Trace.WriteLine("Got the context..."); 
BackupResult lastResult = context.CreateQuery<BackupResult>("LastRun").ToList().OrderByDescending(x => x.RunTime).FirstOrDefault(); 
Trace.WriteLine("Returning the last result. It ran at: " + lastResult.ToString()); 
return lastResult; 

沒有異常都扔了,但我沒有看到任何標記信息的下方跟蹤日誌的,和我的應用程序的邏輯不進行外這種方法。我的本地配置與我的雲配置完全相同。什麼會導致這種行爲?

+0

你是什麼意思「操作失敗默默」?它不會在「lastResult」變量中返回正確的結果嗎?在跟蹤日誌中看到什麼? –

+0

@GauravMantri:在代碼塊之後爲觀察添加更多細節。這有幫助嗎? – TSL

回答

0

你們當中有些人可能想看看出來的東西:

  1. 診斷連接字符串指向您的雲配置文件雲存儲帳戶。
  2. 確保雲存儲中的表(LastRun)包含一些數據。

有一兩件事你可以做(​​或者可能是你已經做了的話)是在模擬器中運行應用程序實際使用雲存儲帳戶,而不是存儲模擬器有。

1

我的心理調試能力告訴我,這不是失敗 - 它只是需要很長時間。調用.ToList()將嘗試檢索表中的每個實體。你的dev存儲表可能沒有太多的行(幾千?),而生產有更多。所以它需要更長的時間。我想你也會試圖將所有這些實體粘在內存中,如果你開始使用頁面文件,這可能會導致速度變慢。

您可以通過將Take(1000)添加到查詢來測試此假設。顯然,這不會給你正確的答案,你只是想看看它是否完成。我的V1.7技能是有些生疏,但我認爲它應該是這樣的:

BackupResult lastResult = context.CreateQuery<BackupResult>("LastRun") 
.Take(1000) //BEFORE the .ToList() - very important! 
.ToList() 
.OrderByDescending(x => x.RunTime) 
.FirstOrDefault(); 

如果有限的查詢會成功完成,那麼實際的解決辦法是要弄清楚如何快速做查詢。您可能需要向查詢添加一些條件,以減少表存儲返回的結果的大小,或者可能以不同的方式對數據進行索引(例如,將RunTime合併到RowKey中)。