Domanda

Ho un app WinForm che ha bisogno di essere a conoscenza di quando un server SQL è disponibile in modo da consentire la funzionalità di unione Sincronizzazione. Ho provato varianti del seguito, che lavorano su base una volta, ma mi piacerebbe venire con qualcosa di un po 'più dinamica.

Il funcion qui sotto (grazie Alex_L ) sta controllando per la porta 1433 che SQL gira su e funziona alla grande. Quello che sto cercando di realizzare è un modo per monitorare questo in tempo reale. Avrei dovuto creare un servizio di Windows? Che dire di tutti gli altri eventi di rete, come il cambio di connessione di rete?

L'utilizzo di questa applicazione a volte collegato è semplice. Se sono sulla nostra rete, allora la porzione di replica di tipo merge è disponibile. Se non sono sulla nostra rete, allora non lo è. Lo SQL Server non dovrebbe mai essere a disposizione della nostra rete e dovrebbe essere sempre disponibile quando su.

Detto questo, avrei aperto a soluzioni involing rilevare nostra rete corrente al posto dell'istanza SQL.

     private static bool IsSqlAvailable()
        {
            TcpClient tcpc = new TcpClient();
             try
               {
                 tcpc.Connect("10.250.50.30", 1433);
                 return true;
               }
             catch
               {
                 return false;
               }
        }
È stato utile?

Soluzione

È possibile controllare la porta 1433 di SQL Server (o un altro, se utilizzato):

TcpClient tcpc = new TcpClient();
try
{
    tcpc.Connect("10.250.50.30", 1433);
    return true;
}
catch
{
    return false;
}

Altri suggerimenti

Ho una voce sul mio blog che mostra come rilevare i cambiamenti disponibilità di rete . Esso utilizza il NotifyAddrChange finestre API per raccogliere un gestito evento ogni volta che c'è un cambiamento nell'interfaccia IP tabella di mappatura degli indirizzi. Dal momento che tali cambiamenti sono associati a cambiamenti delle disponibilità di rete (spina del cavo in, Wi-Fi unirsi, VPN collegare, dial-up, 3G dial-up, ecc) è possibile utilizzare l'evento per verificare la disponibilità del server e avviare la sincronizzazione.

Io probabilmente andare con il secondo metodo, aggiungendo nei controlli le varie proprietà del database per assicurarsi che sia sicuro di scrivere.

http://msdn.microsoft.com/en-us/library /ms176049.aspx

Plan Ok B in risposta al commento qui sotto: Avere il server SQL inviare una sorta di 'Heartbeat' per la vostra applicazione principale (Ping o qualsiasi altra cosa, a voi). Si può avere la vostra applicazione eseguire un thread separato per guardare per quel battito cardiaco ogni X secondi. Se si smette di ricevere quel battito cardiaco, allora non sei connesso al server per eseguire la stampa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top