Ich versuche, eine größere JSON-Zeichenfolge (c.2Mb) in einer NVARCHAR (MAX) -Spalte in einer SQL Azure-Datenbank zu speichern, bekomme aber die folgende Ausnahme:
[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.)]
Die INSERT-Anweisung funktioniert einwandfrei, wenn ich die JSON-Zeichenfolge auf "" setze. Ich habe erfolgreich andere, kleinere JSON-Strings mit der gleichen Methode gespeichert. Die Ausnahme wird sofort ausgelöst und fühlt sich nicht wie eine Zeitüberschreitung an. Trotzdem habe ich versucht, die Verbindungs- und Befehls-Timeouts vergeblich zu ändern.
Ich verwende Dapper, um mit SQL zu sprechen:
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();
}
}
Hat jemand das gleiche Problem erlebt und irgendwelche Ideen, wie man es beheben kann?
Versuchen Sie, die Zeitüberschreitung auf etwas höher zu setzen. Gemäß der Dokumentation hängt der Fehler mit dem Timeout zusammen.
https://support.microsoft.com/en-us/kb/555938
Ich hoffe es hilft.
-RN
Ich hatte dieses Problem und konnte die Ursache des Problems nicht genau diagnostizieren, aber ich führte eine Verbindungs-Resiliency-Klasse ein, um bei Fehlern automatisch erneut zu versuchen. Auch wenn dies das zugrunde liegende Grundproblem nicht löst oder identifiziert, hat es die Anwendung dennoch robust gegenüber dem Problem gemacht.
Ich verwende Entity Framework, um eine Verbindung zu Azure SQL herzustellen, und eine grundlegende Anleitung zur Implementierung einer ausfallsicheren Verbindung mit DbExecutionStrategy finden Sie hier .
Es sieht so aus, als ob Sie eine Verbindung mit ADO herstellen. Hier finden Sie einen nützlichen Beitrag zur Implementierung der ADO.NET Connection Resiliency .