2015-04-24 11 views
11

Szukałem tego błędu, który występuje sporadycznie w wywołaniu AJAX do witryny Azure ASP.NET, a dziś w końcu udało mi się go znaleźć w naszych dziennikach. Podejrzewałem, że blokada blokuje operację, ale wygląda na to, że nie udało się połączyć z bazą danych Azure SQL.Limit czasu połączenia przerywanego w usłudze Azure SQL na żądanie AJAX

Oto wiadomość wyjątek:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 
This failure occurred while attempting to connect to the routing destination. 
The duration spent while attempting to connect to the original server was - 
[Pre-Login] initialization=28; handshake=43; [Login] initialization=0; authentication=0; [Post-Login] complete=2; 

Jest to ciąg połączenia używam:

Server=tcp:<server>,1433;Database=<database>;User ID=<user>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30 

Zarówno strona internetowa i baza danych SQL Azure są w tym samym regionie. Skala bazy danych to Standard - S0, a witryna Azure to Standard - Mała instancja.

Czy ktoś z was wpadł na ten problem?

+1

Czy dzieje się to sporadycznie lub konsekwentnie? Czy masz przejściową obsługę błędów i logikę ponowną, wbudowaną w twój kod? Przeczytaj http://azure.microsoft.com/en-us/documentation/articles/sql-database-connect-central-recommendations/, aby uzyskać rekomendacje i najlepsze praktyki. – Shantanu

+0

@Shantanu Dzięki za sugestię. Myślę, że używanie Transient Fault handling jest właściwym rozwiązaniem, ale może nie dla problemu, który próbuję rozwiązać. Aplikacja to seria pytań, które użytkownik prosi osobę przez telefon, a następnie zapisuje odpowiedź. Powoduje to problemy dla użytkownika, jeśli trwa to dłużej niż 5 sekund. Zaktualizowałem bazę danych do wersji Standard S2, która prawdopodobnie rozwiązała problem przekroczenia limitu czasu. – TheJesterCrown

+0

Jaki rodzaj obciążenia widzisz dla swojej aplikacji? Ilu użytkowników jednocześnie? – Shantanu

Odpowiedz

1

Wygląda na to, że problem dotyczy połączenia z klienta do Internetu. Jeśli wywołujesz połączenie Ajax w JavaScript po stronie klienta, nie ma znaczenia (przynajmniej jeśli chodzi o wydajność), czy aplikacja internetowa i baza danych znajdują się w tym samym regionie. Bardzo wolne połączenie wywoła timeout.

Ponieważ jest to sporadycznie, zalecam uchwycenie tego błędu w JavaScript i pozwolenie użytkownikowi na ponowienie próby zapisania.

+2

Połączenie, które uległo awarii, było między serwerem sieci Web (np. Aplikacja internetowa Azure) a serwerem bazy danych (usługa Azure SQL). Wydaje mi się, że moim problemem był rozmiar instancji używanej w usłudze Azure SQL, która była S0 (dodałem komentarz @AKS powyżej). Dziękujemy za sugestię! Powinienem opublikować moją rezolucję po rozwiązaniu problemu. – TheJesterCrown

Powiązane problemy