SQL Azure连接已关闭大型json字符串

时间:2016-08-20 17:07:29

标签: c# sql-server azure azure-sql-database dapper

我试图将较大的json字符串(c.2Mb)保存到SQL Azure数据库中的NVARCHAR(MAX)列,但得到以下异常:

[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.)]

如果我将json字符串设置为"",INSERT语句可以正常工作。我用相同的方法成功保存了其他较小的json字符串。异常立即被抛出,所以不会感觉像是超时。尽管如此,我已经尝试更改连接和命令超时无济于事。

我使用Dapper与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();
        }
    }

有没有人遇到过同样的问题,并且有任何想法如何修复它?

3 个答案:

答案 0 :(得分:1)

我遇到了这个问题,无法确切地确定问题的根源是什么,但我引入了一个连接弹性类来自动重试失败。同样,虽然这不能解决或识别潜在的根问题,但它确实使应用程序对该问题具有鲁棒性。

我使用Entity Framework连接到Azure SQL,使用DbExecutionStrategy实现弹性连接的基本方法是here

看起来您可能正在使用ADO进行连接。这是关于实施ADO.NET Connection Resiliency的有用帖子。

答案 1 :(得分:1)

尝试将超时设置为更高的值。根据文档,错误与超时有关。

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

希望它有所帮助。

-RN

答案 2 :(得分:0)

您已设置命令超时,但未提及与db连接时的超时。我建议在连接字符串中扩展连接超时。