2016-11-04 222 views
0

在Azure中託管的應用是提高此異常:SQL Azure的連接失敗嘗試打開與SQL數據庫連接時

An exception has been raised that is likely due to transient failure. If you are connecting to Sql Azure database, consider using SqlAzureStrategy.

我試圖把防火牆關閉,但沒有奏效。

我可以通過sql管理工作室來連接sql數據庫,但是web應用程序不是。

它使用EF6連接數據庫。 這裏是代碼的和平,由此引發的錯誤:

var usuario = Db.Usuario.Where(x => x.Login == login).FirstOrDefault(); 
if (usuario != null && usuario.ProfissionalID.HasValue) 
{ 
    usuario.Profissional = Db.Profissional.Where(x => x.ProfissionalID == usuario.ProfissionalID).FirstOrDefault(); 
} 
return usuario; 

我在Microsoft文章看到,使用SqlAzureStrategy一個recomendation嘗試重新連接時,先連接嘗試失敗:

public class DbContextConfiguration : DbConfiguration 
{ 
    public DbContextConfiguration() 
    { 
    SetExecutionStrategy("System.Data.SqlClient", 
    () => new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30))); 
    } 
} 

但它不」 t似乎是我的問題的解決方案,因爲當我執行此操作時,我收到此錯誤消息:

Maximum number of retries (1) exceeded while executing database operations with 'SqlAzureExecutionStrategy'.

+0

我的連接字符串:

+0

你什麼意思你試圖關閉防火牆?你的意思是你將IP地址添加到例外情況嗎?當您遇到錯誤時,此應用是否在Azure中運行? – juunas

回答

0

我不相信這是數據庫問題否則你會看到一個非常不同的錯誤,實際上表明IP地址不允許通過防火牆。

相反,我會嘗試從Markus Wagner看着這個帖子裏,他談到了maxRetryCountMAXDELAY參數。對我來說,這將是一個很好的起點,可以確保您的代碼正確地設計用於處理這些類。

其次有關Azure SQL服務的許多最佳實踐是published。我希望確保你能夠滿足所有這些最佳實踐,並儘可能調整。我會在看:

  • 最小化網絡延遲
  • 通過引入應用程序級緩存
  • 管理網絡連接減少網絡使用,保持它打開儘可能短
  • 調整你的SQL
  • 執行重試邏輯
+0

感謝您的幫助@Martyn。遵循你的推薦,我可以通過刪除在同一操作中執行的兩個數據庫查詢中的一個來獲得它的工作。我不確定,但是第二個查詢中出現了這個錯誤。 Bouth querys很快,但在數據庫中建立了兩個連接。這是這個錯誤的原因? –

+0

根據你如何處理你的連接,它可能是@OtavioCamargo,很難說沒有看到更多的代碼。 –