2009-01-08 91 views
1

在開發相對簡單的Web服務,這需要通過後提供的數據,並將其記錄在數據庫表中,我們得到這個錯誤:暗戰使用LINQ DB連接到SQL

捕獲到異常:遠程服務器返回錯誤:(500)內部服務器呃 或。 堆棧跟蹤:在某些服務器上System.Net.HttpWebRequest.GetResponse()

但沒有其他服務器。那些得到這個的是物理機器,其他機器是虛擬的,顯然物理服務器更強大。

據我們所知,問題是數據庫連接在每次查詢後都沒有被釋放回池中。我使用下面的使用模式:

   using (VoteDaoDataContext dao = new VoteDaoDataContext()) 
       { 

        dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip); 
        dao.SubmitChanges(); 
        msg += "Thank you for your vote."; 
        dao.Dispose(); 
       } 

我增加了dao.Dispose()調用,以確保當方法完成連接都被釋放,但我不知道它是否是必要的。

我是否正確使用此模式?我還需要做些什麼才能確保連接正確返回到池中?

謝謝!

+0

在使用塊內部不需要處理。是什麼讓你覺得你正在失去聯繫? – TGnat 2009-01-08 22:54:19

回答

3

您的診斷信息不夠好。 HTTP/500不足以詳細說明您的理論是否正確。如果您想要解決問題,您需要在日誌中捕獲完整的堆棧跟蹤。我認爲你已經在這裏得出了一個結論。不,您不需要在使用{}塊結束之前使用Dispose()。這就是使用{} 確實是

0

我認爲dispose()調用是多餘的,但我想確定。

我們看到連接池在SQL日誌中飽和(我無法直接看到,我只是一個開發人員,而且這些東西在產品環境中運行),而我的操作人員說他看到了連接超時......並且一旦超時,服務器就會再次開始運行,直到下次連接池達到飽和。

我們正在經歷調整連接池設置的過程......我想確定我沒有做錯任何事情,因爲這是我第一次使用Linq。

謝謝!

+0

您無法從SQLserver的日誌中看到Web服務器的連接池。 – 2009-01-09 02:22:25