Tedious: SQL Server 2012 ECONNREFUSED

Criado em 8 dez. 2012  ·  20Comentários  ·  Fonte: tediousjs/tedious

Usando o nodejs mais recente e as versões tediosas e o seguinte código:

var Connection = require ('tedioso'). Connection;
var Request = require ('tedioso'). Request;

var config =
{
servidor: '192.168.1.113',
userName: 'myUserName',
senha: 'myPassword',
opções:
{
banco de dados: 'MyDatabase',
porta: '1433',
criptografar: verdadeiro,
driver: 'SQL Server Native Client 11.0'
},
depurar:
{
pacote: verdadeiro,
dados: verdade,
carga útil: verdadeiro,
token: verdadeiro,
log: verdadeiro
}
};

var conexão = nova conexão (configuração);

conexão.on ('conectar', conectado);
connection.on ('infoMessage', infoError);
connection.on ('errorMessage', infoError);
conexão.on ('fim', fim);
connection.on ('depurar', depurar);

função conectada (err)
{
console.log ('conectado =>' + err);
}

function infoError (info)
{
console.log ('infoError =>' + info);
}

depuração de função (mensagem)
{
console.log ('debug =>' + mensagem);
}

fim da função ()
{
}

Recebo o seguinte erro depois de executá-lo:

node test_sqlserver_tedious.js
debug => conexão com 192.168.1.113:1433 - falha Erro: conectar ECONNREFUSED
debug => Mudança de estado: Conectando -> Final
debug => conexão com 192.168.1.113:1433 fechada
depurar => Mudança de estado: Final -> Final

Alguma ideia? Eu poderia ajudá-lo a testar a fonte se você me mostrar como.

Obrigado

Comentários muito úteis

ECONNREFUSED sugere que 192.168.1.113 não está escutando na porta 1433.

A instância do SQL Server definitivamente tem TCP habilitado?
Você pode telnetar para a porta 1433 em 192.168.1.113 (do sistema em que você está usando o tedioso)? Se não, você pode telnetar para a porta 1433 diretamente de 192.168.1.113? Em caso negativo, isso sugere que o SQL Server não está escutando na porta. Em caso afirmativo, isso sugere que algo (talvez um firewall) seja a causa do problema.

Todos 20 comentários

ECONNREFUSED sugere que 192.168.1.113 não está escutando na porta 1433.

A instância do SQL Server definitivamente tem TCP habilitado?
Você pode telnetar para a porta 1433 em 192.168.1.113 (do sistema em que você está usando o tedioso)? Se não, você pode telnetar para a porta 1433 diretamente de 192.168.1.113? Em caso negativo, isso sugere que o SQL Server não está escutando na porta. Em caso afirmativo, isso sugere que algo (talvez um firewall) seja a causa do problema.

Recebo o erro:

debug => conexão com undefined: 1433 - falha Erro: conectar ECONNREFUSED
debug => Mudança de estado: Conectando -> Final
debug => conexão com undefined: 1433 fechado
depurar => Mudança de estado: Final -> Final

    debug=> connection to undefined:1433 closed

O undefined parece suspeito. Eu esperaria ver o nome do servidor ou endereço IP lá.

dbServer: 192.168.11.8 \ SQLEXPRESS2008
dbPort: 1433

@flybluewolf, por favor, dê uma olhada na edição # 68, pois acho que minha resposta é relevante.

OK, parece que se conecta agora. Mas quando tento fazer uma seleção simples, ele simplesmente trava.

Aqui está o resultado da depuração:

depurador ouvindo na porta 51981
debug => conectado a 127.0.0.1:1433
debug => Mudança de estado: Conectando -> SentPrelogin
debug => Mudança de estado: SentPrelogin -> SentLogin7WithStandardLogin
infoError => [objeto objeto]
infoError => [objeto objeto]
debug => Tamanho do pacote alterado de 4096 para 4096
debug => Mudança de estado: SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
debug => Alteração de estado: LoggedInSendingInitialSql -> LoggedIn

Aqui está o meu código:

var Connection = require ('tedioso'). Connection;
var Request = require ('tedioso'). Request;

var config =
{
servidor: "127.0.0.1",
userName: "nome de usuário",
senha: "userpassword",
banco de dados: "MyDatabase",
opções:
{
banco de dados: "MyDatabase",
// porta: "1433",
// criptografar: verdadeiro,
// driver: "SQL Server Native Client 11.0"
},
depurar:
{
pacote: verdadeiro,
dados: verdade,
carga útil: verdadeiro,
token: verdadeiro,
log: verdadeiro
}
};

var conexão = nova conexão (configuração);

conexão.on ('conectar', conectado);
connection.on ('infoMessage', infoError);
connection.on ('errorMessage', infoError);
conexão.on ('fim', fim);
connection.on ('depurar', depurar);

função conectada (err)
{
executeStatement ();
}

função executeStatement ()
{
var request = new Request ("Select * from Property.PropertyGroups", function (err, row_count)
{
se (errar)
{
}
outro
{
console.log (row_count);
}

    connection.close();
});

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

}

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

depuração de função (mensagem)
{
var dd = mensagem;
console.log ('debug =>' + mensagem);
}

fim da função ()
{
var dd = '';
}

Eu executo 'netstat -na', mas não encontro a porta UDP 1444

Não vejo nenhuma chamada para connection.exec...(request) em seu código. Portanto, a solicitação não está sendo executada. Isso é consistente com as mensagens de debug=> State change: ... . Eles param quando a autenticação é concluída.

Ugh, OK, isso funcionou. Muito obrigado: D

Presumo que @flybluewolf são a mesma pessoa e que este problema trata apenas de um problema?
Se eu estiver enganado, sinta-se à vontade para reabrir.

Não, eles são duas pessoas diferentes. Comecei a postagem e agora estou funcionando.

Olá, desculpe por reviver isso, mas estou tendo um problema ao usar o último trecho de código postado por @adviner (com as credenciais alteradas corretamente, é claro). Nunca consigo passar da fase SentPreLogin. Usando o mesmo código, toda a saída que obtenho é:

debug => conectado ao SERVERt: 1433
debug => Mudança de estado: Conectando -> SentPrelogin
debug => Mudança de estado: SentPrelogin -> SentLogin7WithStandardLogin
depurar => conexão com o SERVIDOR: 1433 fechada
debug => Mudança de estado: SentLogin7WithStandardLogin -> Final
depurar => conexão com o SERVIDOR: 1433 fechada
depurar => Mudança de estado: Final -> Final

(URL do servidor obscurecido).

O banco de dados está sendo executado no Azure e posso telnetar para ele a partir do nó da máquina em execução.

Qualquer ajuda seria apreciada.

Pelo que entendi, os bancos de dados do Azure exigem uma conexão criptografada.
Presumivelmente, você está se conectando com encrypt: true nas opções de conexão? Eu pergunto porque https://github.com/pekim/tedious/issues/65#issuecomment -11765693 comentou isso.

O código que você está usando não verifica se há um erro no retorno de chamada do Connection, a função connected . Você deve consertar isso, pois pode receber um erro relatado lá.

As conexões entediantes criptografadas com o nó v0.10 (e v0.9) foram interrompidas. Veja # 86 para um pouco mais de informação e um commit que eu acredito que corrige o problema.

O mesmo commit que corrige o problema da v0.10, também padroniza a cifra de criptografia para RC4-MD5, porque ainda não consegui fazer com que as conexões criptografadas funcionassem com DES-CBC3-SHA ainda. Isso se aplica ao nó v0.8 também.

Você pode tentar usar o código mais recente no master, para pegar a correção, por favor?

Se isso ainda falhar, você pode colocar toda a saída de depuração em um gist ou pastebin, por favor? Você deve obter muitos detalhes, incluindo dumps hexadecimais dos pacotes TDS. Você provavelmente desejará editar alguns detalhes do pacote login7.

Obrigado pela resposta rápida. Ultrapassei o erro anterior, mas agora obtenho o seguinte resultado:

debug => conectado a XXX.database.windows.net:1433
debug => Mudança de estado: Conectando -> SentPrelogin
debug => mudança de estado: SentPrelogin -> SentTLSSSLNegotiation
depurar => TLS negociado (RC4-MD5, TLSv1 / SSLv3)
debug => Mudança de estado: SentTLSSSLNegotiation -> SentLogin7WithStandardLogin
infoError => [objeto objeto]
{"número": 40531, "estado": 1, "classe": 11, "mensagem": "O nome do servidor não pode ser determinado. Ele deve aparecer como o primeiro segmento do nome do dns do servidor (nome_do_servidor.database.windows.net ). Algumas bibliotecas não enviam o nome do servidor, caso em que o nome do servidor deve ser incluído como parte do nome do usuário (nome de usuário @ nome do servidor). Além disso, se ambos os formatos forem usados, os nomes do servidor devem corresponder. "," serverName ":" "," procName ":" "," lineNumber ": 1," name ":" ERROR "," event ":" errorMessage "}
Falha na autenticação; um ou mais eventos errorMessage devem ter sido emitidos
debug => Mudança de estado: SentLogin7WithStandardLogin -> Final
debug => conexão com XXXX.database.windows.net:1433 fechada
depurar => Mudança de estado: Final -> Final

O servername está marcado como XXX (presumo) e faz parte da string de conexão para o banco de dados azure.

O último problema foi um problema com nossa string de conexão. Tudo está funcionando agora. Obrigado!

Fantástico.
Isso foi com o código mais recente do mestre ou uma versão lançada do tedioso?

Clonou a versão mais recente do mestre

Caros especialistas,
Eu encontrei o mesmo erro, mas o problema é que meu erro está acontecendo depois que uma conexão é estabelecida e ele está inserindo arquivos grandes no banco de dados, não tenho nenhum problema com arquivos pequenos:

adicionando dados ao banco de dados
obtendo colunas do banco de dados
obteve as colunas da tabela com sucesso
adicionando linhas ao banco de dados
linhas inseridas com sucesso
adicionando dados ao banco de dados
obtendo colunas do banco de dados
obteve as colunas da tabela com sucesso
adicionando linhas ao banco de dados
linhas inseridas com sucesso
adicionando dados ao banco de dados
obtendo colunas do banco de dados
obteve as colunas da tabela com sucesso
adicionando linhas ao banco de dados
linhas inseridas com sucesso
adicionando dados ao banco de dados
obtendo colunas do banco de dados
obteve as colunas da tabela com sucesso
adicionando linhas ao banco de dados
{[ConnectionError: Falha ao conectar ao localhost: 1433 - conectar EADDRINUSE 127 .0.0.1: 1433] nome: 'ConnectionError', mensagem: 'Falha ao conectar ao localhost: 1433 - conectar EADDRINUSE 127.0.0.1:1 433', código : 'ESOCKET'}

Agradecemos seu apoio.

@Beniy Você tem código de exemplo que podemos usar para reproduzir isso?

Caro Arthurschreiber,
Na verdade o problema não pode estar relacionado ao código porque às vezes ele está analisando o arquivo de texto e inserindo no banco de dados, mas às vezes está mostrando aquele erro, mesmo com o mesmo arquivo e mesma condição, mas em tempo diferente.
Eu quero saber alguma outra dependência para esta tarefa?

Obrigado

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ghost picture ghost  ·  5Comentários

anthonylau picture anthonylau  ·  8Comentários

jstephens7 picture jstephens7  ·  5Comentários

yianni-ververis picture yianni-ververis  ·  5Comentários

diginfo picture diginfo  ·  6Comentários