Lors de ma migration vers Azure, j'ai implémenté l'équipe de conseil client de Windows Azure AppFabric "TransientFaultHandling framework". http://appfabriccat.com/2011/02/transient-fault-handling-framework/SQL Azure réessaie-t-il la structure logique TransientFaultHandling est-il livré avec des stratégies de réessai par défaut?
Voici ce que je tout simplement pas à mon code (si facile il semble trop beau pour être vrai):
1/Référence à Microsoft.AzureCAT.Samples.TransientFaultHandling.dll
dans mon projet (avec espace de noms importé automatique)
2/Définir une fonction publique sur une bibliothèque de DLL commune qui renvoie une politique commune:
Public Shared Function retryPolicy() As RetryPolicy
Dim oPolicy As RetryPolicy = New RetryPolicy(Of SqlAzureTransientErrorDetectionStrategy)(10, TimeSpan.FromMilliseconds(100))
Return oPolicy
End Function
3/Remplacée tous oConn.Open()
avec oConn.OpenWithRetry(retryPolicy())
et remplacé tous les autres Reader
, Scalar
, NonQuery
avec:
oCmd.ExecuteReaderWithRetry(retryPolicy())
oCmd.ExecuteNonQueryWithRetry(retryPolicy())
oCmd.ExecuteScalarWithRetry(retryPolicy())
4/C'est tout
Il fonctionne, je veux dire qu'il n'y a erreurs, mais comme je suis en train de tester sur mon serveur SQL local, je ne sais pas si la logique de réessai est correc tly implémenté car je ne suis pas au courant d'un moyen de tester un échec de connexion.
J'ai lu quelques exemples d'implémentation de cette structure TransientFaultHandling, et certains incluaient une classe personnalisée pour détecter le code d'erreur du serveur SQL. Je n'ai pas créé une telle classe pour garder les choses simples, car je suppose que le framework est livré avec un bon comportement par défaut concernant la nouvelle tentative basée sur le code d'exceptions SQL Azure.
Aux questions: - Mon code est-il correct en cas d'échec de connexion SQL Azure classique? Ou dois-je configurer une classe personnalisée pour détecter l'exception de codes par moi-même?
Parfait! Merci ! – kdstack