Ich verwende SqlretryLogicBaseProvider, um meine Wiederholungen für eine SQL Azure .NET Framework 4.8 Win Forms -Anwendung zu definieren. Ich fange gerade erst an, die zugrunde liegenden Mechanismen zu verstehen, indem ich einfache Trennungstests durchführe. Ich habe auch einige Kunden mit einem sehr instabilen Internet. Wenn ich also die Internetverbindung verliere, kann es ein Problem sein, einen Befehl auszuführen. Daher habe ich der transienten Fehlerliste Fehlercode 11001 hinzugefügt. Ich habe jedoch einfach nicht den richtigen Weg, um die Wiederholungslogik zu konfigurieren. Wenn das Internet beim Öffnen der Verbindung verloren geht, ist alles "in Ordnung", Connection.open wird wiederholt. Wenn das Internet jedoch verloren geht. Der aktuelle Zustand der Verbindung ist 'geschlossen'. < /P>
Wo muss ich den Verbindungsstatus verarbeiten? Im Wiederholungsereignis des SqlretrylogicBaseProviders? Wird es wiedergegeben, wenn es dort behandelt wird? < /P>
Hier ist mein Code: < /p>
var options = new SqlRetryLogicOption()
{
// Tries 5 times before throwing an exception
NumberOfTries = 5,
// Preferred gap time to delay before retry
DeltaTime = TimeSpan.FromSeconds(5),
// Maximum gap time for each delay time before retry
MaxTimeInterval = TimeSpan.FromSeconds(60),
TransientErrors = new List { -1, -2, 0, 109, -2146232060, 596, 1204, 1205, 1222, 49918, 49919, 49920, 4060, 4221, 40143, 40613, 40501, 40540, 40197, 10929, 10928, 10060, 10054, 10053, 997, 233, 64, 18401, 11001 ,1232}
};
// Create a retry logic provider
SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
provider.Retrying += (object s, SqlRetryingEventArgs e) =>
{
LogRetry(e);
// handle connection loss here? if so, how?
}
try
{
using (var connection = new SqlConnection(ConnectionString))
{
//retry provider for connection:
connection.RetryLogicProvider = provider;
// SqlParameter parameter;
const string selectCmd = "SELECT data FROM mydata WHERE dataID = @dataID";
using (var command = new SqlCommand(selectCmd, connection))
{
SqlParameter parameter = new SqlParameter("@dataID", SqlDbType.NVarChar, 9);
parameter.Value = did;
command.Parameters.Add(parameter);
// set retry provider for command:
command.RetryLogicProvider = provider;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0}", reader.GetString(0));
}
}
}
}
catch (Exception ex)
{
return String.Empty;
}
< /code>
Bearbeiten 1: < /strong>
Ich habe das Wiederholungsereignis geändert. Der RetrylogicProvider ist immer noch Teil der Verbindung. Das [url=viewtopic.php?t=15738]Problem[/url] ist nun, dass der interne Wiederholungsschalter verloren geht und immer auf die Nummer 1 eingestellt ist, so dass meine Verbindung in einer endlosen Schleife wiedergegeben wird. Konnte noch nicht herausfinden, wie ich das erhöhen konnte. < /P>
provider.Retrying += (object s, SqlRetryingEventArgs e) =>
{
LogRetry(e);
if (s is SqlConnection)
{
var conn = s as SqlConnection;
conn.Close();
conn.Open();
}
else
{
if (s is SqlCommand)
{
var cmd = s as SqlCommand;
cmd.Connection.Close();
cmd.Connection.Open();
}
}
};
Ich verwende SqlretryLogicBaseProvider, um meine Wiederholungen für eine SQL Azure .NET Framework 4.8 Win Forms -Anwendung zu definieren. Ich fange gerade erst an, die zugrunde liegenden Mechanismen zu verstehen, indem ich einfache Trennungstests durchführe. Ich habe auch einige Kunden mit einem sehr instabilen Internet. Wenn ich also die Internetverbindung verliere, kann es ein [url=viewtopic.php?t=15738]Problem[/url] sein, einen Befehl auszuführen. Daher habe ich der transienten Fehlerliste Fehlercode 11001 hinzugefügt. Ich habe jedoch einfach nicht den richtigen Weg, um die Wiederholungslogik zu konfigurieren. Wenn das Internet beim Öffnen der Verbindung verloren geht, ist alles "in Ordnung", Connection.open wird wiederholt. Wenn das Internet jedoch verloren geht. Der aktuelle Zustand der Verbindung ist 'geschlossen'. < /P> Wo muss ich den Verbindungsstatus verarbeiten? Im Wiederholungsereignis des SqlretrylogicBaseProviders? Wird es wiedergegeben, wenn es dort behandelt wird? < /P> Hier ist mein Code: < /p> [code]var options = new SqlRetryLogicOption() { // Tries 5 times before throwing an exception NumberOfTries = 5, // Preferred gap time to delay before retry DeltaTime = TimeSpan.FromSeconds(5), // Maximum gap time for each delay time before retry MaxTimeInterval = TimeSpan.FromSeconds(60), TransientErrors = new List { -1, -2, 0, 109, -2146232060, 596, 1204, 1205, 1222, 49918, 49919, 49920, 4060, 4221, 40143, 40613, 40501, 40540, 40197, 10929, 10928, 10060, 10054, 10053, 997, 233, 64, 18401, 11001 ,1232} };
// Create a retry logic provider SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options); provider.Retrying += (object s, SqlRetryingEventArgs e) => { LogRetry(e); // handle connection loss here? if so, how? }
try { using (var connection = new SqlConnection(ConnectionString)) { //retry provider for connection: connection.RetryLogicProvider = provider;
// SqlParameter parameter; const string selectCmd = "SELECT data FROM mydata WHERE dataID = @dataID";
using (var command = new SqlCommand(selectCmd, connection)) { SqlParameter parameter = new SqlParameter("@dataID", SqlDbType.NVarChar, 9); parameter.Value = did; command.Parameters.Add(parameter); // set retry provider for command: command.RetryLogicProvider = provider;
connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine("{0}", reader.GetString(0)); } } } } catch (Exception ex) { return String.Empty; } < /code> Bearbeiten 1: < /strong> Ich habe das Wiederholungsereignis geändert. Der RetrylogicProvider ist immer noch Teil der Verbindung. Das [url=viewtopic.php?t=15738]Problem[/url] ist nun, dass der interne Wiederholungsschalter verloren geht und immer auf die Nummer 1 eingestellt ist, so dass meine Verbindung in einer endlosen Schleife wiedergegeben wird. Konnte noch nicht herausfinden, wie ich das erhöhen konnte. < /P> provider.Retrying += (object s, SqlRetryingEventArgs e) => { LogRetry(e);
if (s is SqlConnection) { var conn = s as SqlConnection; conn.Close(); conn.Open(); } else { if (s is SqlCommand) { var cmd = s as SqlCommand; cmd.Connection.Close(); cmd.Connection.Open(); } } }; [/code]
Ich verwende SqlretryLogicBaseProvider, um meine Wiederholungen für eine SQL Azure .NET Framework 4.8 Win Forms -Anwendung zu definieren. Ich fange gerade erst an, die zugrunde liegenden Mechanismen...
Ich sende einige JSON-Daten an unseren Server und habe dabei Probleme beim Codieren bestimmter Werte mit dem neuen Swift 4 JSONDecoder. Nehmen Sie dieses Spielplatzbeispiel:
Ich hatte ein Java-Programm für mich geschrieben, das eine einzelne Seite einer 36 hohen x 48 breiten PDF-Datei in drei einzelne Seiten, 12x36, 24x36 und 12x36, „schneiden“ würde, die ich dann...
Ich verwende LettuceConnection mit einem Verbindungspool, um meine Anwendung mit einem Redis -Server zu verbinden. Während des Lasttests stieß ich jedoch auf eine erhebliche Anzahl von Befehls...