2016-07-29 21 views
1

Ich schreibe eine Anwendung, die eine SslStream/NetworkStream/TcpClient sowie mehrere SqlConnection Instanzen hat. Ich sende und empfange ständig Daten über sie, aber da dies eine Anwendung ist, die sowohl lokal als auch remote auf mehrere Server zugreift, muss ich die Verbindungen auf Fehler überwachen und irgendwie versuchen, sie neu zu starten, sollten sie fehlschlagen. Gibt es eine von Microsoft unterstützte Konvention für die Überwachung dieser Klassen? Die Documenton zeigt mir wirklich nichts. Ich habe versucht, CanRead/CanWrite für die SslStream und ich habe natürlich die Möglichkeit, Timeouts zu überwachen. Gibt es eine empfohlene Zeit für diese Zeitmessung? Ist das Überwachen/Zählen von Timeouts die einzige Möglichkeit, Verbindungsverluste zu überwachen?C#: Überwachung Verbindungen

Antwort

2

Verwaltete SqlConnection Instanzen sollten kurzlebig sein. Erstellen Sie sie nur, wenn Sie sie benötigen, und entsorgen Sie sie dann. Behalte sie nicht in deiner Anwendung herum, wenn du sie willst, das ist eine sehr schlechte Übung. Der Grund dafür ist, dass Sql Server (wie auch andere Datenbanken) das Verbindungspooling implementiert, so dass das Erstellen der verwalteten Verbindung relativ günstig ist, da die zugrunde liegende Verbindung wiederverwendet wird, sobald sie wieder in den Pool freigegeben wird.

+0

Dies ist sehr hilfreich. Das einzige Problem ist, dass diese Anwendung konstante Datenpaketströme von einem Remote-Dienst empfängt, formatiert und in mehrere SQL-Datenbanken einfügt. Wie wird das konventionell gehandhabt? Wenn ich für jede Zeile, die ich einfügen möchte, eine neue Verbindung öffne, wird das nicht sehr intensiv werden? Sollte ich jeden Insert auf einem anderen Thread ausführen, so dass ich zu jedem Zeitpunkt viele Verbindungen aufgebaut habe? – Rob

+1

@Rob - Sie können eine Warteschlange einrichten (es gibt mehrere Warteschlangen-Provider in .net) und sie strukturieren, so dass eingehende Daten in eine Warteschlange geschoben werden und dann jede XXX (ein bestimmter Zeitraum) die Warteschlange durch Drücken der Daten geleert wird die Datenbank (en). Bei jeder Ausführung, bei der Daten, die aus der Warteschlange gelesen und in die DB geschrieben werden, eine neue SqlConnection für diesen Zeitraum erstellen und sie dann nach Abschluss der Iteration ablegen. – Igor

+0

Das hatte ich nicht bedacht, was komisch ist, da ich schon so viele andere Warteschlangen in meinem Programm habe. Gibt es eine gute Software-Faustregel dafür, wie oft eine Warteschlange behandelt wird? – Rob