Tedious: SQL Server 2012 ECONNREFUSED

Creado en 8 dic. 2012  ·  20Comentarios  ·  Fuente: tediousjs/tedious

Usando las últimas versiones de nodejs y tediosas y el siguiente código:

var Conexión = require ('tedioso'). Conexión;
var Solicitud = require ('tedioso'). Solicitud;

var config =
{
servidor: '192.168.1.113',
userName: 'myUserName',
contraseña: 'myPassword',
opciones:
{
base de datos: 'MyDatabase',
puerto: '1433',
cifrar: verdadero,
controlador: 'SQL Server Native Client 11.0'
},
depurar:
{
paquete: cierto,
datos: verdadero,
payload: cierto,
token: cierto,
log: verdadero
}
};

var conexión = nueva conexión (config);

connection.on ('conectar', conectado);
connection.on ('infoMessage', infoError);
connection.on ('mensaje de error', infoError);
connection.on ('final', final);
connection.on ('depurar', depurar);

función conectada (err)
{
console.log ('conectado =>' + err);
}

función infoError (info)
{
console.log ('infoError =>' + info);
}

función de depuración (mensaje)
{
console.log ('debug =>' + mensaje);
}

función end ()
{
}

Recibo el siguiente error después de ejecutarlo:

nodo test_sqlserver_tedious.js
debug => conexión a 192.168.1.113:1433 - error fallido: conecte ECONNREFUSED
debug => Cambio de estado: Conectando -> Final
debug => conexión a 192.168.1.113:1433 cerrada
debug => Cambio de estado: Final -> Final

¿Algunas ideas? Podría ayudarlo a probar la fuente si me muestra cómo.

Gracias

Comentario más útil

ECONNREFUSED sugiere que 192.168.1.113 no está escuchando en el puerto 1433.

¿La instancia de SQL Server definitivamente tiene TCP habilitado?
¿Puede telnet al puerto 1433 en 192.168.1.113 (desde el sistema en el que está usando tedious)? Si no es así, ¿puede hacer telnet al puerto 1433 directamente desde 192.168.1.113? Si no es así, sugiere que SQL Server no está escuchando en el puerto. Si es así, sugiere que algo (tal vez un firewall) es la causa del problema.

Todos 20 comentarios

ECONNREFUSED sugiere que 192.168.1.113 no está escuchando en el puerto 1433.

¿La instancia de SQL Server definitivamente tiene TCP habilitado?
¿Puede telnet al puerto 1433 en 192.168.1.113 (desde el sistema en el que está usando tedious)? Si no es así, ¿puede hacer telnet al puerto 1433 directamente desde 192.168.1.113? Si no es así, sugiere que SQL Server no está escuchando en el puerto. Si es así, sugiere que algo (tal vez un firewall) es la causa del problema.

Me sale el error:

debug => conexión a undefined: 1433 - error fallido: conectar ECONNREFUSED
debug => Cambio de estado: Conectando -> Final
debug => conexión a indefinido: 1433 cerrado
debug => Cambio de estado: Final -> Final

    debug=> connection to undefined:1433 closed

El undefined parece sospechoso. Esperaría ver el nombre del servidor o la dirección IP allí.

dbServer: 192.168.11.8 \ SQLEXPRESS2008
dbPort: 1433

@flybluewolf, por favor, eche un vistazo al número 68, ya que creo que mi respuesta es relevante.

Bien, parece conectarse ahora. Pero cuando trato de hacer una selección simple, simplemente se cuelga.

Aquí está la salida de depuración:

depurador escuchando en el puerto 51981
debug => conectado a 127.0.0.1:1433
debug => Cambio de estado: Conectando -> SentPrelogin
debug => Cambio de estado: SentPrelogin -> SentLogin7WithStandardLogin
infoError => [objeto Objeto]
infoError => [objeto Objeto]
debug => El tamaño del paquete cambió de 4096 a 4096
debug => Cambio de estado: SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
debug => Cambio de estado: LoggedInSendingInitialSql -> LoggedIn

Aquí está mi código:

var Conexión = require ('tedioso'). Conexión;
var Solicitud = require ('tedioso'). Solicitud;

var config =
{
servidor: "127.0.0.1",
userName: "nombre de usuario",
contraseña: "contraseña de usuario",
base de datos: "MyDatabase",
opciones:
{
base de datos: "MyDatabase",
// puerto: "1433",
// cifrar: verdadero,
// controlador: "SQL Server Native Client 11.0"
},
depurar:
{
paquete: cierto,
datos: verdadero,
payload: cierto,
token: cierto,
log: verdadero
}
};

var conexión = nueva conexión (config);

connection.on ('conectar', conectado);
connection.on ('infoMessage', infoError);
connection.on ('mensaje de error', infoError);
connection.on ('final', final);
connection.on ('depurar', depurar);

función conectada (err)
{
executeStatement ();
}

función executeStatement ()
{
var request = new Request ("Seleccionar * de Property.PropertyGroups", función (err, row_count)
{
si (err)
{
}
demás
{
console.log (recuento_fila);
}

    connection.close();
});

request.on('row', function(columns)
{
    columns.forEach((function(column)
    {
        console.log(column.value);
    }))
})

}

función infoError (info)
{
var dd = info;
console.log ('infoError =>' + info);
}

función de depuración (mensaje)
{
var dd = mensaje;
console.log ('debug =>' + mensaje);
}

función end ()
{
var dd = '';
}

Ejecuto 'netstat -na', pero no encuentro el puerto UDP 1444

No veo ninguna llamada a connection.exec...(request) en su código. Entonces la solicitud no se está ejecutando. Eso es consistente con los mensajes debug=> State change: ... . Se detienen una vez que se completa la autenticación.

Uf, está bien, eso funcionó. Muchas gracias: D

Supongo que @adviner y @flybluewolf son la misma persona, y que este problema solo se trata de un problema.
Si me equivoco, no dude en volver a abrir.

No, son dos personas diferentes. Comencé la publicación y ahora la tengo funcionando.

Hola, perdón por revivir esto, pero tengo un problema al usar el último fragmento de código publicado por @adviner (con las credenciales cambiadas correctamente, por supuesto). Nunca puedo pasar de la fase SentPreLogin. Usando el mismo código, todo el resultado que obtengo es:

debug => conectado a SERVERt: 1433
debug => Cambio de estado: Conectando -> SentPrelogin
debug => Cambio de estado: SentPrelogin -> SentLogin7WithStandardLogin
debug => conexión a SERVIDOR: 1433 cerrado
debug => Cambio de estado: SentLogin7WithStandardLogin -> Final
debug => conexión a SERVIDOR: 1433 cerrado
debug => Cambio de estado: Final -> Final

(URL del servidor oscurecida).

La base de datos se está ejecutando en Azure y puedo hacer telnet desde el nodo de ejecución de la máquina.

Cualquier ayuda sería apreciada.

Según tengo entendido, las bases de datos de Azure requieren una conexión cifrada.
Entonces, ¿presumiblemente se está conectando con encrypt: true en las opciones de conexión? Lo pregunto porque https://github.com/pekim/tedious/issues/65#issuecomment -11765693 tiene esto comentado.

El código que estás usando no busca un error en la devolución de llamada de Connection, la función connected . Debe solucionarlo, ya que es posible que se informe de un error allí.

Se interrumpieron las tediosas conexiones cifradas con el nodo v0.10 (y v0.9). Consulte el n. ° 86 para obtener un poco más de información y una confirmación que creo que soluciona el problema.

La misma confirmación que corrige el problema v0.10, también establece por defecto el cifrado de cifrado en RC4-MD5, porque todavía no he logrado que las conexiones cifradas funcionen con DES-CBC3-SHA. Esto también se aplica al nodo v0.8.

¿Puede intentar usar el último código en el maestro para obtener la solución, por favor?

Si eso aún falla, ¿puede poner toda la salida de depuración en un gist o pastebin, por favor? Debería obtener muchos detalles, incluidos los volcados hexadecimales de los paquetes TDS. Probablemente desee eliminar algunos detalles del paquete login7.

Gracias por la rápida respuesta. Pasé el error anterior, pero ahora obtengo el siguiente resultado:

debug => conectado a XXX.database.windows.net:1433
debug => Cambio de estado: Conectando -> SentPrelogin
debug => Cambio de estado: SentPrelogin -> SentTLSSSLNegotiation
debug => TLS negociado (RC4-MD5, TLSv1 / SSLv3)
debug => Cambio de estado: SentTLSSSLNegotiation -> SentLogin7WithStandardLogin
infoError => [objeto Objeto]
{"number": 40531, "state": 1, "class": 11, "message": "No se puede determinar el nombre del servidor. Debe aparecer como el primer segmento del nombre dns del servidor (servername.database.windows.net ). Algunas bibliotecas no envían el nombre del servidor, en cuyo caso el nombre del servidor debe incluirse como parte del nombre de usuario (username @ servername). Además, si se utilizan ambos formatos, los nombres del servidor deben coincidir. "," serverName ":" "," procName ":" "," lineNumber ": 1," name ":" ERROR "," event ":" errorMessage "}
Error de inicio de sesion; uno o más eventos errorMessage deberían haberse emitido
debug => Cambio de estado: SentLogin7WithStandardLogin -> Final
debug => conexión a XXXX.database.windows.net:1433 cerrada
debug => Cambio de estado: Final -> Final

El nombre del servidor está marcado como XXX (supongo), y es parte de la cadena de conexión para la base de datos azul.

El último problema fue un problema con nuestra cadena de conexión. Todo funciona ahora. ¡Gracias!

Fantástico.
¿Fue esto con el último código del maestro o una versión lanzada de tedious?

Clonado la última versión del maestro.

Estimados expertos,
Me he enfrentado al mismo error, pero el problema es que mi error ocurre después de que se establece una conexión y está insertando archivos grandes en la base de datos, no tengo ningún problema con los archivos pequeños:

agregar datos a la base de datos
obteniendo columnas de db
obtuvo las columnas de la tabla con éxito
agregando filas a la base de datos
filas insertadas con éxito
agregar datos a la base de datos
obteniendo columnas de db
obtuvo las columnas de la tabla con éxito
agregando filas a la base de datos
filas insertadas con éxito
agregar datos a la base de datos
obteniendo columnas de db
obtuvo columnas de la tabla con éxito
agregando filas a la base de datos
filas insertadas con éxito
agregar datos a la base de datos
obteniendo columnas de db
obtuvo las columnas de la tabla con éxito
agregando filas a la base de datos
{[ConnectionError: No se pudo conectar a localhost: 1433 - conectar EADDRINUSE 127 .0.0.1: 1433] nombre: 'ConnectionError', mensaje: 'No se pudo conectar a localhost: 1433 - conectar EADDRINUSE 127.0.0.1:1 433', código : 'ESOCKET'}

Se agradece su apoyo.

@Beniy ¿Tiene un código de ejemplo que podamos usar para reproducir esto?

Estimado Arthurschreiber,
En realidad, el problema no puede estar relacionado con el código porque a veces analiza el archivo de texto y lo inserta en la base de datos, pero a veces muestra ese error, incluso con el mismo archivo y la misma condición pero en un tiempo diferente.
¿Quiero conocer otras dependencias de esta tarea?

Gracias

¿Fue útil esta página
0 / 5 - 0 calificaciones