Problema
Foi observada a ocorrência do erro “Foi fornecido um argumento inválido” no momento de abrir conexões em algumas instâncias da plataforma. O erro ocorre esporadicamente, e fica registrado nos arquivos de log da seguinte maneira:
LATROMI.Common.Exceptions.DbConnectionException: Exception while connecting ---> Npgsql.NpgsqlException: Exception while connecting ---> System.Net.Sockets.SocketException: Foi fornecido um argumento inválido
em System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue, Boolean silent)
em System.Net.Sockets.Socket.SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, Int32 optionValue)
em Npgsql.NpgsqlConnector.SetSocketOptions(Socket socket)
em Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
--- Fim do rastreamento de pilha de exceções internas ---
em Npgsql.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
em Npgsql.NpgsqlConnector.<RawOpen>d__152.MoveNext()
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
em Npgsql.NpgsqlConnector.<Open>d__148.MoveNext()
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
em Npgsql.NpgsqlConnection.<>c__DisplayClass32_0.<<Open>g__OpenLong|0>d.MoveNext()
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
em Npgsql.NpgsqlConnection.Open()
em LATROMI.Common.DAL.DataProvider.OpenConnection(ConnectionContext connectionContext)
--- Fim do rastreamento de pilha de exceções internas ---
em LATROMI.Common.DAL.DataProvider.OpenConnection(ConnectionContext connectionContext)
em LATROMI.Common.DAL.DataProvider.CreateCommand(ConnectionContext connectionContext, String sqlCommand, Nullable`1 commandTimeout)
em LATROMI.Common.DAL.BaseDALFactory`2.SelectOneByQuery(String sqlCommand, TEnumColumns[] columns)
em LATROMI.BLL.Menu.SelectByFriendlyName(String friendlyName)
em LATROMI.Web.UI.HttpModules.FriendlyUrlTransformer.Transform(Uri sourceUrl, Uri& outputUrl)
em LATROMI.Web.UI.HttpModules.UrlRewriterModule.TryRewriteUrl(Uri sourceUrl, Uri& newUrl)
em LATROMI.Web.UI.HttpModules.UrlRewriterModule.OnBeginRequest(Object sender, EventArgs e)
em System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
em System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
em System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
A mensagem de erro também pode ser registrada em inglês:
System.Net.Sockets.SocketException: Invalid argument was supplied
Causa
Este problema é monitorado à anos pelos desenvolvedores do Npgsql (conector de dados .NET oficial do PostgreSQL), e até agora não foi encontrada a causa exata do problema. Conforme a avaliação deles, pode ser a interferência de um agente externo fechando a conexão, como firewall por exemplo.
Solução
Pendente