Niedawno odkryłem, że Entity Framework ma bardzo łatwy sposób na tworzenie połączeń odpornych na SQL Azure. Czy jest jakiś zalecany sposób osiągnięcia tego samego w Dapper?Jak sprawić, by Dapper był odporny na SqlAzure?
Odpowiedz
Najszybszym sposobem zabezpieczenia się przed problemami z połączeniem w języku C# z Azure jest Microsoft Transient Fault Handling Block.
Na przykład poniższy kod będzie ponowić próbę zapisu do 3 razy 1-sekundowych odstępach w międzyczasie, gdy próbuje otworzyć połączenie z bazą danych systemu Windows Azure SQL:
var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(1));
var retryPolicy =
new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);
retryPolicy.ExecuteAction(() => myConnection.Open());
FixedInterval
jest polityka wycofać, więc spróbuję, odczekaj 1 sekundę, spróbuj ponownie, itd., aż spróbujesz 3 razy.
SqlDatabaseTransientErrorDetectionStrategy
po prostu sprawdza wyjątek, jeśli jest to wyjątek połączenia, który powinien zostać ponownie sprawdzony, pokaże RetryPolicy
, aby ponownie wykonać akcję. Jeśli nie jest to wyjątek połączenia, akcja nie zostanie wykonana, a oryginalny wyjątek zostanie zgłoszony jako normalny.
Co do tego, kiedy należy go używać z Dapper; można bezpiecznie ponawiać próby otwierania połączeń i odczytywać operacje, należy jednak pamiętać lub ponawiać operacje zapisu, ponieważ istnieje ryzyko duplikowania wstawek, próby dwukrotnego usunięcia wiersza itp.
Więcej szczegółów here, ta biblioteka może być znaleziona jako NuGet Package here która obejmuje strategie wykrywania dla Windows Azure.
- 1. Jak sprawić, by sterownik Spark był odporny na ponowne uruchomienie Master?
- 2. Jak sprawić, by Pycharm był szybszy/lżejszy?
- 3. Jak sprawić, by fancybox href był dynamiczny?
- 4. Jak sprawić, by zwykły WebRequest był asynchroniczny?
- 5. Jak sprawić, by wget był odpowiednio cichy?
- 6. Jak sprawić, by Tomcat był przenośny?
- 7. Jak sprawić, by atrybut modelu był globalny?
- 8. Jak sprawić, by numer był nieosiągalny (podobnie jak blokada połączeń)?
- 9. Jak mogę sprawić, by kolor Valdatora był czerwony?
- 10. Jak sprawić, by biały układ HTML był nieproporcjonalny?
- 11. Jak sprawić, by wybrany element był przezroczysty w przeglądarce Chrome?
- 12. Jak sprawić, by mój triest był bardziej wydajny?
- 13. Jak sprawić, by komponent był powszechnie dostępny w Angular2
- 14. Jak sprawić, by log Gita nie był wyświetlany, aby kontynuować?
- 15. Jak sprawić, by try-except-KeyError był krótszy w pythonie?
- 16. Jak sprawić, by mój plik kopii aplikacji był szybszy?
- 17. Jak sprawić, by Head był mistrzem w git?
- 18. Jak sprawić, by @ Html.EditorFor niepełnosprawnych
- 19. Jak sprawić, by interfejs działał?
- 20. jak sprawić, aby mój obraz był klikalny
- 21. Jak sprawić, by czas realizacji Placu zabaw był tak szybki, jak gdybyśmy działali w aplikacji iOS?
- 22. Jak sprawić, aby wygląd html był wyłączony?
- 23. Jak sprawić, by Gedit wyglądał jak Textmate?
- 24. Jak sprawić, by klejnot Resztki Rubiego był respektowany typem treści w poście?
- 25. Jak sprawić, by elementy HTML były nieogolone?
- 26. Jak sprawić, by R używało wszystkich procesorów?
- 27. funkcja zmiennych parametrów, jak sprawić, by był bezpieczny i bardziej znaczący?
- 28. Jak sprawić, by wybór strefy czasowej był bardziej przyjazny dla użytkownika?
- 29. Jak sprawić, by DateFormat odgadł zamierzone stulecie?
- 30. Jak sprawić, by luźny bot opuścił kanał?
Dapper jest po prostu opakowaniem wokół ADO.NET; co * dokładnie * masz na myśli przez "uczynić ... odpornym" tutaj? co chcesz zrobić inaczej? –
Chcę wykonywać wszystkie wywołania Execute i Query, które wykonuję w Dapper, aby przetrwać drobne problemy z chmurą spowodowane przez Azure. Po tym linku http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx oznacza to, że mogę po prostu zaktualizować moje środowisko do połączeń 4.5.1 i ADO.Net do środowiska SQL Azure będzie automatycznie odporne? –
Nie @JakobLithner, które nie będą wystarczające. Ten link omawia tylko rozłączenia połączenia. Nie wspomina o przejściowych błędach, które są głównym problemem. –