我试图将较大的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();
}
}
有没有人遇到过同样的问题,并且有任何想法如何修复它?
答案 0 :(得分:1)
我遇到了这个问题,无法确切地确定问题的根源是什么,但我引入了一个连接弹性类来自动重试失败。同样,虽然这不能解决或识别潜在的根问题,但它确实使应用程序对该问题具有鲁棒性。
我使用Entity Framework连接到Azure SQL,使用DbExecutionStrategy实现弹性连接的基本方法是here。
看起来您可能正在使用ADO进行连接。这是关于实施ADO.NET Connection Resiliency的有用帖子。
答案 1 :(得分:1)
答案 2 :(得分:0)
您已设置命令超时,但未提及与db连接时的超时。我建议在连接字符串中扩展连接超时。