Falhas de login aleatório do SQL Server 2005 para o aplicativo de formulários do windows

2

Um de nossos aplicativos de formulários do Windows do VS .NET 2008 é executado em várias máquinas clientes. O aplicativo aleatoriamente tem falhas de login de máquinas aleatórias e de locais aleatórios no código. O login funciona quase sempre, mas aproximadamente uma vez a cada quinze minutos aparece um erro nos logs de erro do SQL Server de um usuário aleatório. Estamos executando um sistema SQL Server 2005 em cluster e o banco de dados está no modo 2005 (90).

O seguinte erro aparece nos logs de erro do SQL Server:

Login failed for 'App_Login'. [CLIENT: XXX.XXX.X.XXX] Error: 18456, Severity: 14, State: 16.

O seguinte erro é o que o cliente vê:

System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

A string de conexão usada pelo aplicativo é:

Data Source=XX.XXX.XXX.XXX;Network Library=DBMSSOCN;Initial Catalog=document7;User Id=App_Login;Password=PASSWORDHERE;

(NOTA: XXX.XXX.X.XXX e XX.XXX.XXX.XXX são os endereços IP)

  • Os bancos de dados 'document7' e 'master' estão no modo multiusuário.
  • O login tem acesso a 'document7' e a 'master'.
  • Às vezes, os clientes incorrem no erro, mas tentar novamente a mesma ação após uma falha é bem-sucedida sem nenhuma alteração.
  • Eu posso usar o 'App_Login' usando o estúdio de gerenciamento sem problemas. Eu posso acessar o banco de dados 'document7' e o banco de dados 'master' sem problemas.
  • Temos outros aplicativos que usam a mesma cadeia de conexão e não apresentam problemas.
  • Eu tentei o login com um banco de dados padrão de 'master' e 'document7' com o mesmo resultado em ambos os casos.

Obrigado pelo seu tempo e qualquer ajuda!

    
por Mindy 02.08.2010 / 18:13

2 respostas

2

Nesse caso, acho que o erro do SQL Server não é tão revelador quanto o erro do cliente. O erro do cliente indica que a conexão já existia e foi cortada, o que, na minha opinião, é a descrição mais precisa do que está acontecendo. Esta postagem no blog explica o problema.

Basicamente, uma conexão no pool foi cortada por algum motivo (talvez inatividade ou talvez blip de rede) e o cliente não sabe que a conexão foi interrompida até que execute outra consulta usando-a. Isso explica por que esse problema ocorre apenas com o aplicativo do nosso Windows Form, porque esse aplicativo deixaria as conexões inativas por períodos muito mais longos do que os outros aplicativos. Além disso, o aplicativo da web mora no mesmo local físico que o servidor de banco de dados, portanto, não terá tantos problemas de conexão na rede.

Para corrigir o problema, só preciso verificar o erro e executar novamente a consulta uma segunda vez. A consulta deve funcionar na segunda vez porque receberá automaticamente um novo SPID e uma nova conexão.

    
por 04.08.2010 / 17:38
0

verifique este blog . Não deixe de conferir os comentários e as discussões abaixo de um deles:

"(Error: 18456, Severity: 14,) State: 16 means that the incoming user does not have permissions to log into the target database. So for example say you create a user FOO and set FOO's default database to master, but FOO does not have permissions to log into master. "

    
por 02.08.2010 / 18:31