Ho un'applicazione ASP.NET MVC. Quando viene creato un nuovo cliente tramite CustomerController Eseguo una nuova attività in background (utilizzando HostingEnvironment.QueueBackgroundWorkItem) per creare un nuovo Azure SqlDatabase per quel cliente.Inizializzazione database Entity Framework: timeout durante l'inizializzazione di Azure SqlDatabase
Uso il codice di Entity Framework First per creare/inizializzare il nuovo database. Ecco il codice:
// My ConnectionString
var con = "...";
// Initialization strategy: create db and execute all Migrations
// MyConfiguration is just a DbMigrationsConfiguration with AutomaticMigrationsEnabled = true
Database.SetInitializer(strategy: new MigrateDatabaseToLatestVersion<CustomerDataContext, MyConfiguration>(useSuppliedContext: true));
using (var context = new CustomerDataContext(con))
{
// Neither 'Connection Timeout=300' in ConnectionString nor this line helps -> TimeoutException will rise after 30-40s
context.Database.CommandTimeout = 300;
// create the db - this lines throws the exception after ~40s
context.Database.Initialize(true);
}
mio problema è che ho sempre trovato un TimeoutException dopo circa 40secs. Penso che ciò accada perché Azure non può inizializzare il nuovo database entro questo breve periodo di tempo. Non fraintendetemi: il database sarà creato bene da Azure ma voglio aspettare quel punto/sbarazzarmi dello TimeoutException.
Edit1: sto usando Timeout connessione = 300 nel mio ConnectionString, ma la mia app in realtà non si preoccupa che; dopo circa 40 anni mi imbatto sempre in un SqlError.
Edit2: L'eccezione che solleva è un SqlException. Messaggio: Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde. Fonte: .NET SqlClient Data Provider
Edit3: posso confim ora che questo non ha nulla a che fare con ASP.NET/IIS. Anche in un semplice metodo UnitTest il codice sopra non riesce.
Puoi condividere l'eccezione reale che si sta vedendo, con il messaggio di errore completo? Grazie! –
Ho aggiunto l'eccezione. Grazie. – mmmato
Esiste anche una proprietà CommandTimeout nella classe di configurazione delle migrazioni, puoi provare a impostarla. https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrationsconfiguration.commandtimeout(v=vs.113).aspx –