Tedious: ESOCKET Error de conexión de la aplicación web node js a la conexión de la base de datos MSSql

Creado en 25 sept. 2018  ·  19Comentarios  ·  Fuente: tediousjs/tedious

Hola equipo,
Actualmente, tenemos problemas de conectividad intermitente de nuestra aplicación web a MsSql con frecuencia cuando hay más tráfico en el servicio.
¿Hay alguna recomendación final sobre este tema?

Error :
_Error de conexión: no se pudo conectar a <>:1433 - No se pudo conectar (secuencia)
en Connection.tedious.once.err (D:\home\site\wwwroot\node_modules\mssql\lib\tedious.js:216:17)
en Connection.g (eventos.js:291:16)
en emitOne (eventos.js:96:13)
en Connection.emit (eventos.js:188:7)
en Connection.socketError (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:699:14)
en D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:590:25
en SequentialConnectionStrategy.connect (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:153:9)
en Socket.onError (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:169:16)
en emitOne (eventos.js:96:13)
en Socket.emit (eventos.js:188:7)
código: 'ESOCKET',
error original:_

Detalles de la versión:
"tedioso": "2.0.1",
"mssql": "^4.0.4",

Gracias,
Praveen.

Comentario más útil

Obtuve el mismo error al usar el código copiado de la muestra oficial de Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Finalmente, resolví este error habilitando el protocolo TCP/IP en "Administrador de configuración del servidor Sql"->"Configuración de red del servidor SQL"->"Protocolos para"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Todos 19 comentarios

Hola @Praveen335 👋🏻

Lamento escuchar que enfrenta este problema cuando usa tedious . Desafortunadamente, la información que proporcionó no es suficiente para que entendamos lo que está sucediendo. ¿Podría proporcionar más información? Por ejemplo, sería útil para nosotros saber:

  • ¿Qué versión de tedious estás usando exactamente?
  • ¿Cuándo ocurre exactamente este error? Desde el seguimiento de la pila, parece que esto sucede cuando se conecta a la base de datos, pero ¿pueden conectarse otros procesos al mismo tiempo? Estoy pensando que esto podría ser un problema de SQLServer (tal vez debido a la alta carga que mencionó) y no un problema con tedious en sí mismo.

¡Gracias! 🙇🏻‍♂️

Hola @arthurschreiber ,
Gracias por su rápida respuesta. Ya he actualizado la versión tediosa en mi publicación.

Detalles de la versión:
"tedioso": "2.0.1",
"mssql": "^4.0.4",

Echamos un vistazo al subproceso de trabajo activo para el servidor SQL y la conectividad de red al elevarlo al soporte de Microsoft. Mencionaron todo bien desde el final de SQLServer. El porcentaje de hilo de trabajo también es menor. He intentado volver a intentarlo con lógica personalizada. Pero sin suerte. Después de obtener un error de socket, se lanza continuamente para todas las solicitudes posteriores. Cualquier sugerencia o recomendación nos ayudaría mucho. Actualmente, estamos utilizando el grupo de conexiones para conectarnos a la base de datos.

Gracias,
Praveen.

Lo mismo aquí, de repente llega a ese estado y se atasca...

También estamos viendo los mismos errores de conexión en nuestro sistema.

Estamos conectando un grupo de conexiones al inicio del servicio.
new App.SQL.ConnectionPool

En un momento aleatorio, una solicitud falla con:

Error de conexión: no se pudo conectar al servidor de base de datos: 1433 - No se pudo conectar (secuencia)

El servicio se reinicia automáticamente, pero sigue arrojando estos errores durante unos 20 minutos. Después de que el servicio se reinicie y pueda conectarse nuevamente.

Estamos viendo esto con varios procesos de nodo en este servidor, pero no se caen simultáneamente (a veces lo hacen), lo cual es un poco extraño. Creemos que la causa está en la aplicación NodeJS y no en la base de datos mssql.

Estamos usando estas versiones:

mssql: 4.3.0 (último)
La versión tediosa incluida en este paquete es 2.7.1.

Hola. También estamos experimentando este problema.

Estas son nuestras versiones:
mssql: 4.3.0
que usa la versión tediosa: 2.7.1

ConnectionError: Failed to connect to xxxxxx.database.windows.net:1433 in 15000ms
at Connection.tedious.once.err (...node_modules\mssql\lib\tedious.js:239:17)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Connection.emit (events.js:211:7)
at Connection.connectTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:944:12)
at Timeout._onTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:913:16)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)

Escribe tus versiones de MSSQL Server. Ahora, SQLNCLI11 se reemplaza por MSOLEDBSQL para la instancia de MSSQL2017.
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/

Obtuve el mismo error al usar el código copiado de la muestra oficial de Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Finalmente, resolví este error habilitando el protocolo TCP/IP en "Administrador de configuración del servidor Sql"->"Configuración de red del servidor SQL"->"Protocolos para"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Obtuve el mismo error al usar el código copiado de la muestra oficial de Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Finalmente, resolví este error habilitando el protocolo TCP/IP en "Administrador de configuración del servidor Sql"->"Configuración de red del servidor SQL"->"Protocolos para"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

¡Gracias! Estaba teniendo este problema exacto;)

Dado que todavía estamos experimentando este problema con casi todos nuestros servicios de nodejs, hicimos algunas pruebas adicionales.
El comentario anterior con la corrección de TCP/IP ya estaba habilitado en nuestro servidor sql.

Creamos un nuevo servicio nodejs que no hace absolutamente nada. No es llamado por otro servicio, solo se ejecuta en PM2.
Abrirá un nuevo conjunto de conexiones cuando se inicie y simplemente se quede allí.

Obtuvimos 3 errores en 5 días, ocurriendo al azar:
"ConnectionError: no se pudo conectar a sql.tilroy. internal:1433 - No se pudo conectar (secuencia)".

Este es el código:

`
configuración constante = {
usuario: Config.sql.sqluser,
contraseña: Config.sql.sqlcontraseña,
servidor: Config.sql.sqlhost,
base de datos: Config.sql.sqldatabase,
puerto: Config.sql.sqlport,
tiempo de espera de conexión: 3000,
tiempo de espera de solicitud: 3000,
piscina: {
máx.: 100,
min: 1, //no cierre todas las conexiones.
inactivoTiempo de espera Millis: 1000,
desalojoRunIntervalMillis: 1500000
}
};

const sqlConnection = new SQL.ConnectionPool(config, function (err) {
    Log.debug("got sql connection");
    if(err){
        Log.error(err);
        process.exit(1);
    }
});

sqlConnection.on('error', err => {
    Log.error(`Connection err : ${err}`);
    process.exit(1);
});

`

Actualizamos nuestro servidor SQL pero eso no ayudó. Actualizamos todos nuestros paquetes, pero todavía tenemos estos errores.
¿Algo más que podamos probar? Preferimos no descartar tedious/mssql ya que lo usamos en muchos servicios.

@TimTilroy , ¿está usando tedious para manejar su grupo de conexiones o el tedious-connection-pool ? Si está utilizando el proyecto tedioso, tal vez pueda probar el grupo de conexiones tediosas y ver si eso ayuda.

Hola IanChokS,

No estamos usando el paquete tedious-connection-pool, sino el connectionPool predeterminado del paquete mssql (su uso es tedioso, creo).

Sin embargo, hemos actualizado el paquete mssql a la versión 5.1 ahora y parece estable, no tenemos más errores de conexión en nuestro servicio de prueba. Uno de los cambios es el siguiente:

Se movió la biblioteca del grupo del grupo de nodos a tarn.js

Así que tal vez eso solucionó nuestro problema.

También establecemos las conexiones mínimas del grupo en 0, no sé si eso podría tener algún efecto.

@MarioPerezEsteso , si tiene problemas para conectarse a su servidor, puede intentar asegurarse de que TCP IP esté habilitado y que tenga el número de puerto correcto en su configuración para verificar si se puede acceder al servidor.

@regevbr , @Praveen335 Si está utilizando la agrupación de conexiones, puede intentar usar la biblioteca tarn.js en lugar del grupo de nodos como lo hizo TimTilroy para ver si soluciona sus problemas de conexión. Si no, tal vez intente actualizar a la última versión de mssql (v5.1).

Actualización: hemos aplicado la nueva versión de mssql (5.1.0) a todos nuestros servicios de sql, actualizado las conexiones del grupo mínimo a 0 y parece que los errores de conexión se detuvieron desde nuestra implementación.

Creo que el problema es solo porque estás usando "/" en lugar de "\" en el nombre o algo así

@ Praveen335 ¿Ha intentado actualizar a la nueva versión de mssql (5.1.0) para ver si resuelve su problema? Si no es así, siéntete libre de volver a abrir este problema.

Estoy usando versiones:
mssql: "^6.2.0",
tedioso: "^8.3.0"

He habilitado TCP/IP en el administrador de configuración. También todos mis servicios sql se están ejecutando. sin embargo, recibo el siguiente error:

C:\Nodejs\node-sql-conn\Base de datos>node connect.js
tedioso obsoleto En la próxima versión principal de tedious , la creación de una nueva instancia Connection ya no establecerá una conexión con el servidor automáticamente. Utilice la nueva función auxiliar connect o llame al método .connect en el objeto Connection recién creado para silenciar este mensaje. interno\proceso\task_queues.js:79:11
La conexión falló

C:\Nodejs\node-sql-conn\Databaseconnect.js:26
tirar error;
^
ConnectionError: no se pudo conectar a localhost: indefinido: no se puede llamar a escribir después de que se destruyó una transmisión
en ConnectionError (C:\Nodejs\node-sql-conn\node_modulestedious\lib\errors.js:13:12)
en Connection.socketError (C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1308:56)
en el zócalo.(C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1143:14)
en Socket.emit (eventos.js:327:22)
en errorOrDestroy (interno/streams/destroy.js:108:12)
en onwriteError (_stream_writable.js:418:5)
en onwrite (_stream_writable.js:445:5)
en doWrite (_stream_writable.js:399:11)
en writeOrBuffer (_stream_writable.js:387:5)
en Socket.Writable.write (_stream_writable.js:318:11) {
código: 'ESOCKET'
}

Este es mi código:
var Conexión = require('tedioso').Conexión;
var configuración = {
servidor: 'host local',
autenticación: {
tipo: 'predeterminado',
opciones: {
nombre de usuario: 'sa',
contraseña: '####',
puerto: 1433
}
},
opciones: {
base de datos: 'Empresa',
nombre de instancia: 'MSSQLSERVER',
RowCollectionOnDone: verdadero,
useColumnNames: falso,
TrustServerCertificate: falso
}
};
var conexión = nueva conexión (config);
conexión.on('conectar',función(err){
si (err){
console.log('Error en la conexión');
tirar error;
}
demás{
consola.log('Conectado');
}
});
módulo.exportaciones = conexión;

Obtuve el mismo error al usar el código copiado de la muestra oficial de Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Finalmente, resolví este error habilitando el protocolo TCP/IP en "Administrador de configuración del servidor Sql"->"Configuración de red del servidor SQL"->"Protocolos para"->"TCP/IP"
SQLServerConfigurationManager

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Este trabajo para mí. Gracias por darme la solución.

También estoy experimentando estos errores de conexión de ESOCKET, y el problema no está relacionado con TCP/IP ya que la aplicación está conectada desde AWS EC2 a AS RDS y funciona la mayor parte del tiempo.

FINALMENTE solucioné el error. El script que estaba usando cada vez que solicitaba una nueva conexión:

function getConnection () {
    // console.log("config")
    // console.log(config)
    return new Promise(function (resolve, reject) {
        const pool = new sql.ConnectionPool(getConfig())
        // console.log("Getting connection...");
        pool.connect()
        .then((cn) => {
            // console.log("connection got");
            resolve(cn);
        })
        .catch((e) => {
            // console.log("connection not got");
            reject(e);
        });
    })
}

El script que resolvió el problema:

function runCommand(cmdText) {
    return new Promise((resolve, reject) => {
        pool2Connect
        .then((pool) => {
            // pool.request() // or: new sql.Request(pool2)
            // .input('input_parameter', sql.Int, 10)
            // .output('output_parameter', sql.VarChar(50))
            // .execute('procedure_name', (err, result) => {
            //     // ... error checks
            //     console.dir(result)
            // })
            pool.request() // or: new sql.Request(pool2)
            .query(cmdText)
            .then((rows) => {
                return resolve(rows.recordset);
            })
            .catch((e) => {
                return reject(e);
            });
        })
        .catch((err) => {
            return reject(err);
        });
    });
}

donde pool2Connect debe definirse inicialmente, al iniciar el script:

    pool2 = new sql.ConnectionPool(config);
    pool2Connect = pool2.connect();
    pool2.on('error', err => {
        console.log(err);
    });

Espero eso ayude

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

Temas relacionados

diginfo picture diginfo  ·  6Comentarios

cdibbs picture cdibbs  ·  6Comentarios

SaloniSonpal picture SaloniSonpal  ·  5Comentarios

arthurschreiber picture arthurschreiber  ·  8Comentarios

ricklang picture ricklang  ·  9Comentarios