Como consertar & lsquo; uma conexão existente foi fechada à força pelo host remoto & rsquo; Erro?

Um computador remoto é aquele que não tem presença física; ele só pode ser acessado por meio de algum tipo de rede de computadores. O Host Remoto é o computador que hospeda a rede que hospeda o computador remoto e o cliente remoto é o usuário do cliente remoto na rede. Esse recurso revolucionou muitos processos e também tem um grande escopo no futuro.

No entanto, recentemente, muitos relatórios têm chegado de um erro “ uma conexão existente foi fechada à força pelo host remoto ” ao tentar se conectar ao host remoto. Este erro é acionado com uma conexão de soquete entre um cliente e um servidor. Neste artigo, forneceremos algumas soluções viáveis ​​para retificar completamente esse erro e também informá-lo dos motivos que o acionaram.

O que causa o erro 'Uma conexão existente foi fechada à força pelo host remoto' no Windows?

Depois de receber vários relatórios de vários usuários, decidimos investigar o problema e criar um conjunto de soluções para corrigi-lo. Além disso, examinamos os motivos pelos quais ele foi acionado e os listamos abaixo.

  • Uso de TLS 1.1 / 1.0: Se o aplicativo estiver sendo executado em TLS 1.1 ou TLS 1.0, esse erro pode ser acionado por estarem sendo depreciados. O TLS 1.2 é o caminho a seguir ao selecionar o protocolo que o aplicativo usa.
  • Criptografia desativada: se a criptografia foi desativada para sua máquina, ela impedirá o uso do TLS 1.2 e voltará ao TLS 1.0, o que pode disparar o erro.
  • Implementação de soquete: em alguns casos, um tipo específico de implementação de soquete aciona o erro. Existe um bug com algumas implementações do aplicativo “.NET” e pode causar este erro.
  • Código ausente: para algumas pessoas que estavam usando o Entity Framework, foi observado que uma determinada linha de código estava faltando devido à qual o erro estava sendo acionado.
  • Framework “.NET” desatualizado: Em certos casos, se o Framework “.NET” tiver sido desabilitado, este erro pode ser disparado. Certas tarefas requerem que o framework “.NET” seja atualizado para a versão mais recente para que funcionem corretamente.

Agora que você tem uma compreensão básica da natureza do problema, seguiremos em direção às soluções. Certifique-se de implementá-los na ordem específica em que são apresentados para evitar conflitos.

Solução 1: Habilitando a criptografia

Se a criptografia foi desabilitada para sua máquina, o uso de TLS 1.2 é proibido. Portanto, nesta etapa, estaremos habilitando a criptografia. Por isso:

  1. Pressione “ Windows ” + “ R ” para abrir o prompt Executar.
  2. Digite “regedit” e pressione “ Enter “.
  3. Navegue até o seguinte endereço
    HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031

    Navegue até este endereço se não houver nenhum valor “ SchUseStrongCrypto ” no painel direito.

    HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319
  4. No painel direito, clique duas vezes na opção “ SchUseStrongCrypto ” e digite “ 1 ” como dados de valor.
  5. Clique em “ OK ” para salvar suas alterações e verificar se o problema persiste.

Solução 2: Forçando o uso de TLS 1.2

Se o aplicativo tiver sido configurado para usar TLS 1.1 ou TLS 1.0 em vez de TLS 1.2, pode ocorrer esse erro. Portanto, nesta etapa, estaremos configurando nosso computador para usar o TLS 1.2. Por isso:

  1. Navegue até a raiz do site e clique com o botão direito do mouse no arquivo “global.asax” .
  2. Selecione “ Exibir código ” na lista.
  3. Deve haver um método “ Application_Start ”, adicione a seguinte linha de código a esse método
    if (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) SecurityProtocolType. Tls12;              
  4. Salve suas alterações e verifique se o problema persiste.

Solução 3: Alteração da implementação do soquete

Se uma determinada implementação de soquete tiver um bug ou falha, pode impedir que certos elementos do aplicativo funcionem corretamente, devido ao qual esse erro pode ser acionado. Portanto, nesta etapa, iremos configurá-lo para usar uma implementação diferente. Por isso:

  1. Certifique-se de ter uma classe “ StateObjec t” com “ public byte [] buffer = new byte [1024], public Socket socket; “.
  2. Chame a função “ Receber (Socket s) ” e chame o seguinte código em “ void ReceiveCallback (IAsyncResult ar)
     SocketError errorCode ; int nBytesRec = socket . EndReceive ( ar , out errorCode ); if ( errorCode != SocketError . Success ) { nBytesRec = 0 ; } 
  3. Verifique se o problema persiste após a implementação deste código.

Solução 4: adicionar linhas de comando (apenas para Entity Framework)

Se você estiver usando o Entity Framework, é possível que uma determinada linha de código esteja faltando. Portanto, nesta etapa, adicionaremos essa linha de código para corrigir esse problema. Por isso:

  1. Abra seu arquivo.edmx ” e abra o arquivo “ .context.tt ” abaixo dele.
  2. Abra o arquivo “ .context.cs ” e adicione a seguinte linha de código ao seu construtor
     public DBEntities () : base ( "name=DBEntities" ) { this . Configuration . ProxyCreationEnabled = false ; // ADD THIS LINE ! } 
  3. Verifique se o problema persiste após adicionar esta linha de código.

Solução 5: atualizando o .NET Framework

A versão mais recente do “.NET” Framework é necessária para que tudo funcione perfeitamente. Portanto, nesta etapa, faremos o download da versão mais recente do site e a instalaremos. Por isso:

  1. Navegue até este link para baixar a configuração.
  2. Execute o arquivo.exe ” para iniciar o processo de instalação.
  3. Siga as instruções na tela para instalar o aplicativo em seu computador.
  4. Verifique se o problema persiste após a conclusão da instalação.