Pregunta

Tengo una aplicación WinForm que hay que tener en cuenta cuando un servidor SQL está disponible a fin de permitir la funcionalidad de combinación de sincronización. He tratado de variaciones de los siguientes, que trabajan sobre una base de una vez, pero me gustaría llegar a algo un poco más dinámica.

La continuación del funcion (Gracias Alex_L ) está comprobando para el puerto 1433 que se ejecuta en SQL y funciona muy bien. Lo que estoy tratando de lograr es una manera de controlar esto en tiempo real. ¿Tendría que crear un servicio de Windows? ¿Qué pasa con cualquier otro evento de red, como el cambio de conexión de red?

El uso de esta aplicación a veces conectado es simple. Si están en nuestra red, entonces la parte de la duplicación de mezcla está disponible. Si no están en nuestra red, entonces no lo es. El SQL Server no debe estar disponible de nuestra red y que debe estar siempre disponible cuando está activado.

Una vez dicho esto, yo estaría abierto a soluciones involing detectar nuestra red actual en lugar de la instancia de SQL.

     private static bool IsSqlAvailable()
        {
            TcpClient tcpc = new TcpClient();
             try
               {
                 tcpc.Connect("10.250.50.30", 1433);
                 return true;
               }
             catch
               {
                 return false;
               }
        }
¿Fue útil?

Solución

Puede comprobar el puerto 1433 de SQL Server (u otro, si se utiliza):

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

Otros consejos

Tengo una entrada en mi blog mostrando ¿Cómo detectar cambios en la disponibilidad de la red . Se utiliza el NotifyAddrChange API de Windows para levantar una gestionado evento cada vez que hay un cambio en la tabla de asignación de dirección IP de interfaz. Puesto que tales cambios se asocian con cambios en la disponibilidad de la red (clavija del cable en, Wi-Fi unirse, VPN conectan, dial-up, 3G dial-up, etc) se puede utilizar el evento para probar la disponibilidad del servidor y comenzar su sincronización.

Yo probablemente vaya con el segundo método, la adición de controles de las diversas propiedades de base de datos para asegurarse de que es seguro para escribir.

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

Plan B Aceptar en respuesta al comentario a continuación: Tiene su servidor SQL enviar algún tipo de 'Heartbeat' a su aplicación principal (Ping o lo que sea, depende de usted). Usted puede tener su aplicación para ejecutar un subproceso independiente para vigilar los latidos del corazón que cada X segundos. Si deja de recibir ese latido, entonces usted no está conectado a su servidor para ejecutar la combinación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top