Rol My Azure grabs stuff to process from a database - contiene una instancia de System.Data.SqlClient.SqlConnection
y crea periódicamente una instancia SqlCommand
y ejecuta una consulta SQL.¿Cómo trato la pérdida repentina de conexión a SQL Azure en mi rol de Azure?
Ahora de vez en cuando (por lo general una vez en varios días) que se ejecuta una consulta activará una excepción SqlException
El servicio ha encontrado un error al procesar su solicitud. Inténtalo de nuevo. Código de error 40143. Se produjo un error grave en el comando actual. Los resultados, si los hay, deben descartarse.
que ya he visto muchas veces y ahora mi código coge, llamadas Dispose()
en el SqlConnection
instancia y luego se vuelve a abrir la conexión y vuelve a intentar la consulta. Lo último generalmente resulta en otra excepción SqlException
Tiempo de espera caducado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde.
Lo que se parece mucho a que el servidor SQL Azure no responde o no está disponible por alguna razón.
Actualmente mi código no capta la última excepción, se propaga fuera de RoleEntryPoint.Run()
y la función se reinicia. El reinicio generalmente dura unos diez minutos y una vez que se completa, el problema desaparece durante aproximadamente un día.
No me gusta el reinicio de mi función, lleva un tiempo y la funcionalidad de mi servicio se ve obstaculizada. Me gustaría hacer algo más inteligente.
¿Cuál sería una estrategia para solucionar este problema? ¿Debo volver a intentar la consulta varias veces y cuántas veces y con qué intervalo? ¿Debería hacer algo más? ¿Cuándo me rindo y dejo que el rol se reinicie?
Está disponible también vía nuget. – dunnry
Gracias dunnry No había visto eso. Culpo a Wade por no mantenernos debidamente actualizados;) –
Ese sitio de manejo de fallas transitorias tiene una falla intransigente: está inactivo. – Rory