簡體   English   中英

一段時間后底層連接失敗

[英]Underlying Connection Failed after some time

我們有一個WPF application ,該WPF application通過運行SQL Server 2012生產環境上托管的REST API進行通信。 WPF應用程序可以正常工作,但是經過數小時的CRUD操作后,它始終拋出Under Lying Connection Close exception. 在重新啟動SQL Services之前,我還將在開發環境上運行SQL Express Edition 2012 但是它在開發環境上工作良好。

原因可能有幾種:1)服務器或路由器的設置正在關閉TCP連接。 就像最大的開放時間。 2)這種情況經常發生是由於TCP保留了用於重試數據包的表。 TCP將消息分解為1500字節數據報(數據包的數據部分)。 TCP為發送的每個消息發送一個ACK。 當數據包沒有收到ACK時,通常會在重試5秒鍾左右重發3-5次。 數據包也可以按隨機順序接收。 因此,TCP的發送端必須將每個數據包保存在表中,直到收到ACK。 然后從表中刪除數據包。 接收者必須具有用於重新排序數據包的表。 收到所有先前的數據包后,將從表中刪除數據包。 這些表可能會變得非常大,然后操作系統可能會關閉應用程序。 通常,導致這種情況發生的原因是,當接收端正在運行許多應用程序時,它不會在5秒鍾內確認消息。 因此,發送端重新發送數據包。 重發數據包發送更多的數據,這給接收器增加了更多的處理,從而使接收器更加緩慢。 檢查問題的最佳方法是使用嗅探器,例如Wireshark或Fiddler,查看是否看到重復的數據包編號,表示重試。 通常,您應該看到每個數據包號兩次(發送一次,確認一次)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM