2014-11-24 218 views
2

我有Mysql DB連接到.NET MVC。當我遠程連接它有時工作正常,有時我有這個錯誤信息:身份驗證mysql到.net

MySql.Data.MySqlClient.MySqlException(0X80004005):身份驗證 主機「服務器名」用戶「用戶名」的使用方法 'mysql_native_password'失敗,顯示消息:從流 讀取失敗。 ---> MySql.Data.MySqlClient.MySqlException(0X80004005): 從流讀取失敗。 ---> System.IO.IOException:無法 讀取從傳輸連接數據:一個已建立的連接 被您的主機中的軟件放棄了。 ---> System.Net.Sockets.SocketException:一個建立的連接被 由

請我怎樣才能驗證中止?任何想法來解決它?

+0

如果你給一些代碼示例這將有助於。 – Xeidos 2014-11-24 14:04:53

回答

1

這是一個常見的錯誤,當某種僵局更常見的連接已經開了很長時間的數據庫上發生,並在即使它仍然在使用Web應用程序的數據庫,最終被關閉。

在我的代碼,我用微軟的建議,即重試數據庫命令,如果它失敗。鏈接位於:http://social.technet.microsoft.com/wiki/contents/articles/4235.retry-logic-for-transient-failures-in-windows-azure-sql-database.aspx其他使用RetryPolicy的非Azure問題也存在類似的情況。

這意味着在一個簡單的(Azure在我的情況)有什麼例子是:

private static RetryPolicy<SqlAzureTransientErrorDetectionStrategy> retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(new Incremental(3, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1))); 


// Inside your database function 
retryPolicy.ExecuteAction(() => 
{ 
    db.ExecuteStoredProc("procRecordMetric", cmd); 
}); 
0

在我而言,這是通過SSL導致MySQL服務器上被啓用。

這裏是my.cnf中

#ssl-ca   = /etc/ssl/mysql/ca-cert.pem 
#ssl-cert  = /etc/ssl/mysql/server-cert.pem 
#ssl-key   = /etc/ssl/mysql/server-key.pem 

談到這3條線路的固定問題,我的一個片段。