Tedious: Erreur de connexion ESOCKET de l'application Web node js à la connexion à la base de données MSSql

Créé le 25 sept. 2018  ·  19Commentaires  ·  Source: tediousjs/tedious

Salut l'équipe,
Actuellement, nous rencontrons fréquemment des problèmes de connectivité intermittents de notre application Web à MsSql lorsqu'il y a plus de trafic vers le service.
Y a-t-il des recommandations finales sur cette question.

Erreur :
_{ ConnectionError : Échec de la connexion à <>:1433 - Impossible de se connecter (séquence)
à Connection.tedious.once.err (D:\home\site\wwwroot\node_modules\mssql\lib\tedious.js:216:17)
sur Connection.g (events.js:291:16)
chez émetOne (events.js:96:13)
à Connection.emit (events.js:188:7)
à Connection.socketError (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:699:14)
à D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:590:25
sur SequentialConnectionStrategy.connect (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:153:9)
sur Socket.onError (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:169:16)
chez émetOne (events.js:96:13)
à Socket.emit (events.js:188:7)
code : 'ESOCKET',
Erreur d'origine :_

Détails de la version :
"fastidieux": "2.0.1",
"mssql": "^4.0.4",

Merci,
Pravéen.

Commentaire le plus utile

a obtenu la même erreur lors de l'utilisation du code copié à partir de l'échantillon officiel de Microsoft : https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Enfin, j'ai résolu cette erreur en activant le protocole TCP/IP dans "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for"->"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' }

Tous les 19 commentaires

Salut @ Praveen335 👋🏻

Je suis désolé d'apprendre que vous rencontrez ce problème lorsque vous utilisez tedious . Malheureusement, les informations que vous avez fournies ne nous permettent pas de comprendre ce qui se passe. Pourriez-vous fournir plus d'informations? Par exemple, il nous serait utile de savoir :

  • quelle version de tedious utilisez-vous exactement ?
  • quand cette erreur se produit-elle exactement ? D'après le stacktrace, il semble que cela se produise lors de la connexion à la base de données, mais d'autres processus peuvent-ils encore se connecter en même temps ? Je pense que cela pourrait être un problème SQLServer (peut-être en raison de la charge élevée que vous avez mentionnée) et non un problème avec tedious lui-même.

Merci! 🙇🏻‍♂️

Salut @arthurschreiber ,
Merci pour votre réponse rapide. J'ai déjà mis à jour la version fastidieuse dans mon message.

Détails de la version :
"fastidieux": "2.0.1",
"mssql": "^4.0.4",

Nous avons examiné le fil de travail actif vers le serveur SQL et la connectivité réseau en l'élevant au support Microsoft. Ils ont mentionné tout bon de la fin de SQLServer. Le pourcentage de fil de travail est également inférieur. J'ai essayé de réessayer avec une logique personnalisée. Mais pas de chance. Après avoir reçu une erreur de socket, il lance en continu toutes les requêtes suivantes. Toute suggestion ou recommandation nous aiderait vraiment. Actuellement, nous utilisons le pool de connexion pour nous connecter à la base de données.

Merci,
Pravéen.

Pareil ici, il arrive soudainement à cet état et reste bloqué ...

Nous constatons également que les mêmes erreurs de connexion se produisent sur notre système.

Nous connectons un connectionPool au démarrage du service.
new App.SQL.ConnectionPool

À un moment aléatoire, une requête échoue avec :

ConnectionError : Échec de la connexion au serveur de base de données : 1433 - Impossible de se connecter (séquence)

Le service redémarre automatiquement mais continue de lancer ces erreurs pendant environ 20 minutes. Après ce service redémarre et il peut se reconnecter.

Nous le constatons avec plusieurs processus de nœuds sur ce serveur, mais ils ne s'arrêtent pas simultanément (parfois ils le font), ce qui est un peu bizarre. Nous pensons que la cause se trouve dans l'application NodeJS et non dans la base de données mssql.

Nous utilisons ces versions :

mssql : 4.3.0 (dernière)
La version fastidieuse incluse dans ce package est la 2.7.1.

Salut. Nous rencontrons également ce problème.

Voici nos versions :
mssql : 4.3.0
qui utilise la version fastidieuse : 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)

Écrivez vos versions de MSSQL Server. Maintenant, SQLNCLI11 est remplacé par MSOLEDBSQL pour l'instance MSSQL2017.
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/

a obtenu la même erreur lors de l'utilisation du code copié à partir de l'échantillon officiel de Microsoft : https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Enfin, j'ai résolu cette erreur en activant le protocole TCP/IP dans "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for"->"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' }

a obtenu la même erreur lors de l'utilisation du code copié à partir de l'échantillon officiel de Microsoft : https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Enfin, j'ai résolu cette erreur en activant le protocole TCP/IP dans "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for "->"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' }

Merci! J'avais exactement ce problème ;)

Comme nous rencontrons toujours ce problème avec presque tous nos services nodejs, nous avons effectué des tests supplémentaires.
Le commentaire ci-dessus avec le correctif TCP/IP était déjà activé sur notre serveur sql.

Nous avons créé un nouveau service nodejs qui ne fait absolument rien. Il n'est pas appelé par un autre service, il s'exécute simplement dans PM2.
Il ouvrira un nouveau pool de connexions au démarrage et restera là.

Nous avons eu 3 erreurs en 5 jours, se produisant au hasard :
"ConnectionError : Échec de la connexion à sql.tilroy. internal:1433 - Impossible de se connecter (séquence)".

C'est le code :

`
const config = {
utilisateur : Config.sql.sqluser,
mot de passe : Config.sql.sqlpassword,
serveur : Config.sql.sqlhost,
base de données : Config.sql.sqldatabase,
port : Config.sql.sqlport,
connectionTimeout : 3000,
requestTimeout : 3000,
bassin: {
maxi : 100,
min : 1, // ne ferme pas toutes les connexions.
idleTimeoutMillis : 1000,
evictionRunIntervalMillis : 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);
});

`

Nous avons mis à jour notre serveur SQL, mais cela n'a pas aidé. Mis à jour tous nos packages, mais j'ai toujours ces erreurs.
On peut essayer autre chose ? Nous préférons ne pas jeter fastidieux/mssql car nous l'utilisons dans de nombreux services.

@TimTilroy utilisez-vous fastidieux pour gérer votre pool de connexion ou le pool de connexion fastidieux ? Si vous utilisez le projet fastidieux, vous pouvez peut-être essayer celui de pool de connexion fastidieux et voir si cela vous aide.

Salut IanChokS,

Nous n'utilisons pas le package tedious-connection-pool, mais le pool de connexion par défaut du package mssql (son utilisation fastidieuse, je crois).

Cependant, nous avons mis à jour le package mssql vers la version 5.1 maintenant et il semble stable, nous n'avons plus d'erreurs de connexion sur notre service de test. L'un des changements est le suivant :

Déplacement de la bibliothèque de pool de node-pool vers tarn.js

Alors peut-être que cela a résolu notre problème.

Nous avons également défini les connexions du pool min sur 0, nous ne savons pas si cela pourrait avoir un effet.

@MarioPerezEsteso si vous rencontrez des difficultés pour vous connecter à votre serveur, vous pouvez essayer de vous assurer que TCP IP est activé et que vous avez le bon numéro de port dans votre configuration pour vérifier si le serveur est accessible.

@regevbr , @Praveen335 Si vous utilisez le regroupement de connexions, vous pouvez essayer d'utiliser la bibliothèque tarn.js au lieu du pool de nœuds comme ce que TimTilroy a fait pour voir si cela résout vos problèmes de connexion. Sinon, essayez peut-être de mettre à niveau vers le dernier mssql (v5.1).

Mise à jour : nous avons appliqué la nouvelle version de mssql (5.1.0) à tous nos services sql, mis à jour les connexions du pool min à 0 et il semble que les erreurs de connexion se soient arrêtées depuis notre déploiement.

Je pense que le problème est juste parce que vous utilisez "/" au lieu de "\" dans le nom ou quelque chose comme ça

@ Praveen335 Avez-vous essayé de mettre à niveau vers la nouvelle version de mssql (5.1.0) pour voir si cela résout votre problème ? Sinon, n'hésitez pas à rouvrir ce sujet.

J'utilise les versions :
mssql : "^6.2.0",
fastidieux : "^8.3.0"

J'ai activé TCP/IP dans le gestionnaire de configuration. De plus, tous mes services sql fonctionnent. pourtant je reçois l'erreur suivante:

C:\Nodejs\node-sql-conn\Database>node connect.js
fastidieux obsolète Dans la prochaine version majeure de tedious , la création d'une nouvelle instance Connection n'établira plus automatiquement de connexion au serveur. Veuillez utiliser la nouvelle fonction d'assistance connect ou appeler la méthode .connect sur l'objet Connection nouvellement créé pour faire taire ce message. interne\process\task_queues.js:79:11
La connexion a échoué

C:\Nodejs\node-sql-conn\Databaseconnect.js:26
jeter errer;
^
ConnectionError : Échec de la connexion à l' hôte local : non défini - Impossible d'appeler l'écriture après la destruction d'un flux
à ConnectionError (C:\Nodejs\node-sql-conn\node_modulestedious\lib\errors.js:13:12)
à Connection.socketError (C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1308:56)
à Socket.(C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1143:14)
à Socket.emit (events.js:327:22)
à errorOrDestroy (interne/streams/destroy.js:108:12)
à onwriteError (_stream_writable.js:418:5)
à onwrite (_stream_writable.js:445:5)
à doWrite (_stream_writable.js:399:11)
à writeOrBuffer (_stream_writable.js:387:5)
à Socket.Writable.write (_stream_writable.js:318:11) {
code: 'ESOCKET'
}

Ceci est mon code :
var Connexion = require('fastidieux').Connexion ;
var config = {
serveur : 'localhost',
authentification : {
tapez : 'par défaut',
option : {
nom d'utilisateur : 'sa',
le mot de passe: '####',
port : 1433
}
},
option : {
base de données : 'Société',
nom_instance : 'MSSQLSERVER',
rowCollectionOnDone : vrai,
useColumnNames : faux,
trustServerCertificate : faux
}
} ;
var connexion = nouvelle connexion (config);
connection.on('connect',function(err){
si (erreur){
console.log('Échec de la connexion');
jeter errer;
}
autre{
console.log('Connecté');
}
});
module.exports = connexion ;

a obtenu la même erreur lors de l'utilisation du code copié à partir de l'échantillon officiel de Microsoft : https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Enfin, j'ai résolu cette erreur en activant le protocole TCP/IP dans "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for "->"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' }

Celui-ci fonctionne pour moi. Merci de me donner la solution.

J'expérimente également ces erreurs de connexion ESOCKET, et le problème n'est pas lié à TCP/IP puisque l'application est connectée d'AWS EC2 à AS RDS et qu'elle fonctionne la plupart du temps.

ENFIN j'ai résolu l'erreur. Le script que j'utilisais à chaque fois que je demandais une nouvelle connexion :

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);
        });
    })
}

Le script qui a résolu le problème :

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);
        });
    });
}

où pool2Connect doit être défini initialement, lors du démarrage du script :

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

J'espère que ça aide

Cette page vous a été utile?
0 / 5 - 0 notes