Conexión de SQL Azure cerrada para grandes cadenas json

azure azure-sql-database c# dapper sql-server

Pregunta

Estoy intentando guardar una cadena json grande (c.2Mb) en una columna NVARCHAR (MAX) en una base de datos SQL Azure, pero obtengo la siguiente excepción:

[SqlException (0x80131904): A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)]

La instrucción INSERT funciona bien si configuro la cadena json en "". He guardado con éxito otras cadenas json más pequeñas con el mismo método. La excepción se produce inmediatamente, por lo que no se siente como un tiempo de espera. Sin embargo, he intentado cambiar la conexión y los tiempos de espera de los comandos en vano.

Estoy usando Dapper para hablar con SQL:

 public async Task<PublisherDto> SaveNewAsync(PublisherDto publisher, int userID)
    {
        using (var cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
        {
            var b = await cnn.QueryAsync<PublisherDto>("s_PublisherInsert", new
            {
                publisher.cv_id,
                publisher.Name,
                publisher.ThumbImageUrl,
                publisher.FullImageUrl,
                userID,
                publisher.cv_Url,
                publisher.JsonData,
                publisher.cv_version_hash
            }, commandType: CommandType.StoredProcedure, commandTimeout: 60);
            return b.FirstOrDefault();
        }
    }

¿Alguien ha experimentado el mismo problema y tiene alguna idea de cómo solucionarlo?

Respuesta aceptada

Intente configurar el tiempo de espera a algo más alto. Según la documentación, el error está relacionado con el tiempo de espera.

https://support.microsoft.com/en-us/kb/555938

Espero eso ayude.

-RN


Respuesta popular

Tuve este problema y no pude diagnosticar exactamente cuál era el origen del problema, pero introduje una clase de resistencia de conexión para volver a intentar automáticamente las fallas. Una vez más, si bien esto no resuelve ni identifica el problema subyacente de la raíz, sí robó la aplicación al problema.

Utilizo Entity Framework para conectarme a Azure SQL, y aquí está un instructivo básico sobre cómo implementar una conexión flexible usando DbExecutionStrategy.

Parece que se puede conectar usando ADO. Aquí hay una publicación útil sobre la implementación de la resiliencia de la conexión ADO.NET .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué