ERRO NÃÂVEL DE TRANSPORTE C# NO SQL SERVER
Bom dia!
Pelo que identifiquei, quando um usuário com Notebook executar meu sistema e depois desconectar o cabo de rede, passando a usar o Wi-fi ou vice-versa, e executar uma ação no banco, o SQL Server gera o erro a nÃÂvel de transporte:
Não entendo o porque disso, pois sempre abro e fecho a conexão a cada ação no banco de dados, só se o Windows guarda alguma "coisa" que identifica meu app/usuário na conexão inicial (Ethernet ou Wi-fi) e isso faz o SQL não aceitar e achar falha na segurança pela troca da rede. Ao gerar o erro o usuário é obrigado e fechar e reiniciar meu APP para funcionar na "nova" rede, seja wi-fi ou cabo, após a mudança.
No site da Microsoft achei esse código para detectar a conexão ou não do cabo de rede, porém não sei se isso irá ajudar, já que teria de guardar na primeira execução se o cabo está conectado ou não. E a cada novo acesso ao SQL, testaria se houve alteração para exibir uma mensagem ao usuário de reiniciar o aplicativo pela troca da rede.
Acredito que a troca de rede não deveria obrigar a reinicialização do aplicativo, como ocorre por exemplo nos celulares, onde a troca da rede Wi-fi pela rede de dados do celular, não impede o funcionamento.
C# = Dot.net 3.5 com SQL Server
Alguém já passou por isso ou tem alguma ideia de uma solução eficaz?
Pelo que identifiquei, quando um usuário com Notebook executar meu sistema e depois desconectar o cabo de rede, passando a usar o Wi-fi ou vice-versa, e executar uma ação no banco, o SQL Server gera o erro a nÃÂvel de transporte:
Citação:Um erro no nÃÂvel de transporte ocorreu ao enviar a solicitação ao servidor. (provider: Provedor TCP, error: 0 - Foi foçado o cancelamento de uma conexão existente pelo host remoto.
Não entendo o porque disso, pois sempre abro e fecho a conexão a cada ação no banco de dados, só se o Windows guarda alguma "coisa" que identifica meu app/usuário na conexão inicial (Ethernet ou Wi-fi) e isso faz o SQL não aceitar e achar falha na segurança pela troca da rede. Ao gerar o erro o usuário é obrigado e fechar e reiniciar meu APP para funcionar na "nova" rede, seja wi-fi ou cabo, após a mudança.
No site da Microsoft achei esse código para detectar a conexão ou não do cabo de rede, porém não sei se isso irá ajudar, já que teria de guardar na primeira execução se o cabo está conectado ou não. E a cada novo acesso ao SQL, testaria se houve alteração para exibir uma mensagem ao usuário de reiniciar o aplicativo pela troca da rede.
foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
{
if (netInterface.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;
if (netInterface.OperationalStatus == OperationalStatus.Up)
MessageBox.Show(netInterface.Name + " Está Operando");
else
MessageBox.Show(netInterface.Name + " Não está operando");
}
Acredito que a troca de rede não deveria obrigar a reinicialização do aplicativo, como ocorre por exemplo nos celulares, onde a troca da rede Wi-fi pela rede de dados do celular, não impede o funcionamento.
C# = Dot.net 3.5 com SQL Server
Alguém já passou por isso ou tem alguma ideia de uma solução eficaz?
Acontece que o SQL Server, assim como muitos outros bancos de dados, deixam a conexão em pooling, e por este motivo, mesmo que voce conecte/desconecte a cada transação, a conexão permanece no pool. Está é uma forma de garantir que a reconexão na próxima transação seja mais rápida possÃÂvel, aumentando o desempenho da aplicação.
Voce pode definir na string de conexão se deseja que a conexão permaneça no pool de conexões.
Essa é a forma mais bruta de resolver essa questão, mas acredito que voce deve revisar as suas chamadas ao banco, priorizando a utilização do bloco using na instancia da sua conexão, desta forma voce irá fazer automaticamente o disposing do objeto.
Voce pode definir na string de conexão se deseja que a conexão permaneça no pool de conexões.
"server=***;database=***;uid=***;pwd=***;pooling=false;max pool size=100"
Essa é a forma mais bruta de resolver essa questão, mas acredito que voce deve revisar as suas chamadas ao banco, priorizando a utilização do bloco using na instancia da sua conexão, desta forma voce irá fazer automaticamente o disposing do objeto.
Guimoraes entendi.
Não conhecia esse pooling. Vou dar uma estudada. Obrigado.
Não conhecia esse pooling. Vou dar uma estudada. Obrigado.
É...o pooling tá aàdesde os tempos dos dinossauros, a gente é que esquece dele
Faça seu login para responder