Uma conexão foi estabelecida com sucesso com o servidor, mas ocorreu um erro durante o handshake pré-login


111

Estou recebendo o seguinte erro ao tentar conectar o banco de dados de produção do ambiente local.

Consegui conectar o Production DB antes, mas de repente estou recebendo o seguinte erro, alguma ideia?

Uma conexão foi estabelecida com sucesso com o servidor, mas ocorreu um erro durante o handshake pré-login. (provedor: Provedor TCP, erro: 0 - O identificador é inválido.)

Eu estava tentando executar o site asp.net em um PC local, que tem a cadeia de conexão do banco de dados de produção, a seguir está o rastreamento de pilha para o erro que estou obtendo no ambiente local.

>    at MyWebsiteDAL.clsForumQuestion.SelectAll(Int32 CurrentPageIndex, Int32 PageSize) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsiteDAL\clsForumQuestion.cs:line 821
       at CodeConnect.Default.Page_Load(Object sender, EventArgs e) in D:\EDrive\My WebSites\MyWebsite\MyWebsite\MyWebsite\Default.aspx.cs:line 100
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Alguma ideia do que pode ter dado errado aqui?


A qual DBMS você está se conectando?
Will A

1
Você consegue se conectar do PC local com SSMS? Esta pergunta seria melhor colocada em serverfault.com
Will A

Sim, consigo me conectar. O que eu observo é que de repente começa a funcionar.
Jordon Willis

2
Acredito que esta questão pertence ao StackOverflow (e não ao ServerFault) porque o problema subjacente que causou o erro foi Asp.net Cassini no Visual Studio. Parar todas as instâncias existentes do Cassini (WebDev.WebServer.exe) e reexecutar o aplicativo funcionou para mim.
MikeTeeVee

@ MikeTeeVee Eu tive o mesmo problema com um aplicativo WinForm simples. Nenhum cassini envolvido.
Sylvain Rodrigue

Respostas:


154

Solução

1) Limpe sua solução VS.Net

2) Projeto de reconstrução.

3) Redefinir IIS

4) Execute o projeto novamente.

Basicamente isso resolveu meu problema, mas no meu caso eu não estava recebendo esse erro e de repente meu ambiente local começou a me dar o erro acima, então pode ser que esse truque funcione para mim.


25
Eu tive um problema semelhante (localhost também). O ponto-chave parece ter sido o ponto 3. Tudo que eu parecia precisar fazer era matar a instância do VS WebServer (Cassini) e reconstruir e apertar F5. Isso resolveu para mim. Obrigado pela sua resposta. (Você deve considerar marcá-lo como a solução)
Amadiere,

1
Essa solução também funcionou para mim. Eu também estava usando o VS Web Server (Cassini) em vez do IIS, assim como o Amadiere.
Simon Lomax,

7
Isso parece mais uma solução alternativa do que uma correção. Eu me pergunto se o verdadeiro problema tem a ver com o pool de conexão.
jrummell

2
Tive isso de novo hoje. Tudo o que você precisa fazer é executar iisreset em um prompt de comando do administrador.
Ian Kemp,

6
Essa resposta pode ser melhorada fornecendo algumas orientações possíveis para a análise da causa raiz. As soluções alternativas têm valor, mas é mais útil saber por que isso ocorre e por que a solução alternativa funciona.
laindir

15

- Salve seu trabalho,
- Feche o Visual Studio e
- Reabra seu projeto

Sempre funciona para mim.


29
Isso funcionou para mim também, mas geralmente acho que fazer um café enquanto ele reinicia faz toda a diferença.
ED-209

Eu tive um problema semelhante, mas com um servidor de nó em vez disso. Eu estava executando um servidor de nó no ubuntu VM guest e acessando do host do Windows 10 VM. Pausar e salvar a VM, depois redefinir o host do Windows 10 e abrir a VM de volta funcionou, então presumi que era um problema com o Windows, não com o servidor local. Mas então, eu tentei redefinir o servidor do nó local, e isso também corrigiu ... então, quem sabe, ha
RyanQuey


9

Eu experimentei esse erro ao executar alguns processos que exigem muita memória. Quando o sistema começou a ficar sem memória, comecei a notar esse tipo de erro. Tive que mudar o algoritmo para fazer um melhor uso da RAM.

Note-se que enquanto alguns tópicos lançaram esta exceção, alguns outros lançaram:

System.Data.SqlClient.SqlException (0x80131904): Tempo limite de conexão expirado. O período de tempo limite decorreu ao tentar consumir a confirmação do handshake pré-login. Isso pode ocorrer porque o handshake pré-login falhou ou o servidor não conseguiu responder a tempo. A duração gasta ao tentar se conectar a este servidor foi - [Pré-Login] inicialização = 43606; aperto de mão = 560; ---> System.ComponentModel.Win32Exception (0x80004005): A operação de espera atingiu o tempo limite

Ambos os problemas desapareceram depois que o sistema foi alterado para que pudesse ser executado usando menos RAM.


1
Confirmado. Executei processamento intensivo no SQL Server a partir de C # usando parallel.foreach no meu laptop. Meu uso de memória estava no máximo. O computador mal podia ser usado por cerca de 15 minutos antes de eu receber esse erro.
TheLegendaryCopyCoder

8

Eu tive o mesmo problema, estava armazenando dados da sessão no banco de dados, a string de conexão tinha Encrypt = True nela, que presumo que disse ao cliente sql para se conectar ao servidor no modo seguro (SSL), removendo isso ajudou!


1
Este sinalizador será adicionado à sua cadeia de conexão se você for usar um Banco de Dados SQL do Windows Azure. Tenho quase certeza de que também será usado para outros provedores de PaaS / IaaS / Server.
Parth Shah


5

Você pode querer verificar algumas coisas:

  1. Seu servidor de produção permite conexões remotas. (possível que alguém tenha desativado isso, especialmente se você tiver um DBA)

  2. Verifique sua string de conexão. Às vezes, se você estiver usando um endereço IP ou nome de servidor, isso causará este erro. Experimente ambos.


4

No meu caso foi:

Persist Security Info=True;

na minha string de conexão que precisava ser removida. Depois que fiz isso, não tive mais problemas.


3

Conforme descrito na resposta de Ricardo ,

netsh Winsock reset

funcionou para mim,

PS: se você tiver um gerenciador de download da Internet ou programas que alteram a configuração de IP, estão instalados, depois de executar este comando ao reinicializar o computador, o IDM pedirá para alterar a configuração. Defina NÃO neste caso e execute o aplicativo, ele funcionará corretamente.

Espero


3

Tive um problema semelhante ao não conseguir me conectar a um banco de dados e tentei as recomendações aqui.

No final do dia, isso é o que funcionou para mim:

Usou a ferramenta SQL Server Configuration Manager para habilitar os protocolos TCP / IP e / ou Named Pipes no computador cliente SQL Server.

  1. Clique em Iniciar, aponte para Todos os programas e clique em SQL Server Configuration Manager.
  2. Clique para expandir Configuração de rede do SQL Server e clique em Protocolos de cliente.
  3. Clique com o botão direito do mouse no protocolo TCP / IP e clique em Ativar.
  4. Clique com o botão direito do mouse no protocolo de Pipes nomeados e clique em Ativar.
  5. Reinicie o serviço do servidor SQL se for solicitado.

Ainda não sei por que ou quando isso foi desativado.


3

No meu caso, esse erro ocorreu com dot net core e Microsoft.Data.SqlClient. A resolução era adicionar ;TrustServerCertificate=trueao final da string de conexão.


Obrigado, você me salvou :)
DiPix

Era isso ao usar certificados autoassinados
Geoff Gunter

2

Para mim, a solução é matar os processos de trabalho expresso do IIS zumbi.

por exemplo, localize no Gerenciador de Tarefas e finalize a tarefa.

insira a descrição da imagem aqui


1

Eu tive o mesmo problema e não estava tendo sorte com as correções sugeridas. Então me deparei com este artigo e vi o comentário de Mirrh sobre um programa chamado Sendori bloqueando o LSP. Não tenho ideia de como chegou ao meu computador, mas lá estava e removê-lo corrigiu o problema.

Se o artigo não funcionar, verifique seus programas e desinstale o Sendori, caso o veja.


1

Reiniciei o serviço SQL Server (Sharepoint) e ele resolveu o problema.


1

Eu estava tendo exatamente o mesmo problema sem alterações na base de código ou nos servidores. Descobriu-se que o servidor de banco de dados estava funcionando com 100% da CPU e o SQL Server estava sem tempo de CPU, o que causou o tempo limite.



1

Tentei a maioria das opções acima e nada funcionou. Em seguida, desliguei o software VPN (NordVPN) e estava tudo bem.


1

Tentei muitas soluções no mês passado, nenhuma funcionou. O problema é que o banco de dados de produção está dentro de uma VPN e, de alguma forma, o provedor ISP acha que a conexão HTTP não é segura. No entanto, consegui me conectar ao mesmo banco de dados de produção do SSMS (usa TCP).

Minha solução: usar o telefone celular como um ponto de acesso e usar dados móveis em vez do Wi-Fi do meu escritório / casa.


1
Mesmo no meu caso. Obrigado!
David Lo

0

Teve o mesmo problema, o motivo para isso foi a biblioteca BCrypt.Net, compilada no framework .NET 2.0, enquanto todo o projeto, que o utilizou, foi compilado com .NET 4.0. Se os sintomas forem os mesmos, tente baixar o código-fonte do BCrypt e reconstruí-lo na configuração de versão no .NET 4.0. Depois de fazer isso, o "handshake pré-login" funcionou bem. Espero que ajude alguém.


0

Eu experimentei esse erro e fiz todas as sugestões de vocês aqui, mas nenhuma surtiu efeito no meu erro.

Eu peguei o culpado: se você está usando um *.iniarquivo para o seu sistema, você pode querer verificar qual nome de servidor foi inserido lá e certificar-se de que é o mesmo que está em sua string de conexão web.config.


0

O mesmo problema aqui e nenhuma resposta listada funcionou, nem qualquer solução que eu pudesse encontrar online. O problema começou logo depois que a atualização de aniversário do Windows 10 foi aplicada em meu PC de desenvolvimento e afetou apenas minha antiga instância do SQL Server 2005. Não consegui me conectar à instância por meio de meus aplicativos da Web ou mesmo usando Sql Management Studio.

Se valer a pena, isto é o que resolveu para mim:

  1. Abra o SQL Server Configuration Manager (dependendo de qual versão do SQL Server você está executando):

    • C: \ Windows \ SysWOW64 \ SQLServerManager.msc
    • C: \ Windows \ SysWOW64 \ SQLServerManager10.msc OU
    • C: \ Windows \ SysWOW64 \ SQLServerManager12.msc OU
    • etc
  2. Selecione os serviços do SQL Server

  3. Localize o serviço com problemas e veja as Propriedades

    • por exemplo, SQL Server (SQL2005) no meu caso
  4. Na guia Logon, altere a "Conta interna" para "Serviço de rede"

O que é quase o que esta solução aleatória disse: http://www.kutayzorlu.com/operating-systems/linux-unix-redhat-debian-ubuntu-opensuse-centos/general-server-administrating/error-fixed-a-connection -foi-estabelecido-com-sucesso-com-o-servidor-mas-então-ocorreu-um-erro-durante-o-pré-login-handshake-12405.html

Escolhi o serviço de rede sem nenhum motivo. O meu já estava configurado para usar o sistema local. Essa segurança não importa para mim, pois era problemática apenas na minha máquina de desenvolvimento local, acessada apenas localmente. Não posso dizer por que isso funciona, mas funcionou.


0

No meu caso, estava recebendo o erro quando queria acessar um banco de dados remoto. No entanto, resolvi isso iniciando o serviço SQL Server Browser.

insira a descrição da imagem aqui


0

Se você estiver se conectando a um SQL Server antigo:

Mude de System.Data. SqlClient.SqlConnection to System.Data. OleDb.OleDbConnection

Use uma string de conexão OleDb:

<connectionStrings>
<add name="Northwind" connectionString="Provider=SQLOLEDB.1; Data Source=MyServer; Initial Catalog=Northwind;  Persist Security Info=True; User ID=abc; Password=xyz;" providerName="System.Data.OleDb" />
</connectionStrings>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.