2017-05-16 15 views
0

SQL Server 2012を実行中の生産環境でホストされているREST APIを通じて通信するWPF applicationがあります。 WPFアプリケーションはうまくいきますが、何時間かCRUD操作をしても投げていきますUnder Lying Connection Close exception.私がSQL Servicesを再起動するまでは、開発環境でもSQL Express Edition 2012を実行しています。しかし、開発環境でうまく動作します。しばらくしてから基盤接続に失敗しました

答えて

1

これが発生する理由はいくつかあります。1)サーバーまたはルーターに、TCP接続を閉じる設定があります。最大オープン時間のように。 2)これは、TCPがパケットを再試行するために保持するテーブルのために、より頻繁に発生します。 TCPは、メッセージを1500バイトのデータグラム(パケットのデータ部分)に分割します。 TCPは送信された各メッセージに対してACKを送信します。パケットがACKを受け取らない場合、再試行の約5秒で通常3〜5回再送されます。パケットはランダムな順序で受信することもできます。したがって、TCPの送信側は、ACKが受信されるまで各パケットをテーブルに保持する必要があります。その後、テーブルからパケットを削除します。受信機は、パケットを並べ替えるためのテーブルを持たなければならない。以前のすべてのパケットが受信されると、パケットはテーブルから削除されます。これらのテーブルは非常に大きくなり、オペレーティングシステムがおそらくアプリケーションを終了します。通常これが起こる原因は、受信側が5秒間にメッセージをACKしない多くのアプリケーションを実行している場合です。したがって、送信側はパケットを再送信します。再送パケットはより多くのデータを送信し、受信機に処理を追加し、受信機をさらに遅くする。問題をチェックする最良の方法は、wiresharkやfiddlerのようなスニファを使用して、再試行を示すパケット番号が重複しているかどうかを確認することです。通常、各パケット番号は2回表示されます(送信されると1回、ACKの場合は1回)。

関連する問題