Ho recentemente impostato il mio primo sito Web su Azure. Per ora, è fondamentalmente solo il sito Web standard di MVC4 con i controller Home e Account. In Azure, ho un sito Web e un database SQL. Posso accedere al database SQL Azure da SSMS e configurare un account utente e un accesso da utilizzare dal mio sito web.Impossibile accedere al database SQL di Azure dal sito Web di Azure anche se la stessa stringa di connessione funziona dal sito Web locale
Nel mio ambiente di sviluppo, indicando il mio database di sviluppo, posso accedere alla pagina/Account/Login. Posso registrarmi e posso vedere il nuovo utente nel mio db locale. Posso anche cambiare la stringa di connessione per indirizzare il mio sito web di sviluppo nel mio DB SQL di Azure, e di nuovo posso accedere a/Account/Login e registrare nuovi utenti. Posso quindi vedere quei nuovi utenti nel database SQL di Azure.
I problemi si verificano quando distribuisco il sito Web in Azure. Ho una configurazione di trasformazione associata al mio file delle impostazioni di pubblicazione e posso vedere nella finestra di output quando si pubblica il sito in Azure che questa trasformazione viene applicata durante la distribuzione. Questo modifica la stringa di connessione del DB di sviluppo locale alla stringa di connessione di SQL Azure. Ho anche verificato che questa stringa di connessione SQL Azure si trovi nel file web.config attualmente distribuito (utilizzando FileZilla FTP per recuperare l'effettivo web.config distribuito). Posso accedere alla home page del mio sito su [mysite] .AzureWebsites.net, ma quando clicco sul link di accesso per andare alla pagina/account/Login, ottengo il seguente errore:
[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.]
System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +5313265
System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +124
System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +95
System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +59
System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +24
System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +167
System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +61
System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +66
System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) +122
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +32
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +127
System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName() +13
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +346
System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() +17
System.Data.Entity.Database.Exists() +36
[MyWebsite].Filters.SimpleMembershipInitializer..ctor() +105
Questo sembra suggerire che c'è un problema con la mia stringa di connessione, ma come ho detto prima, questa stessa stringa di connessione funzionava dal mio sito web locale.
Ho considerato che il problema potrebbe essere relativo al firewall, ma ho controllato le impostazioni nel portale di gestione di Azure e la regola del firewall di Windows Azure Services viene applicata per consentire tale accesso. Inoltre, ho provato a rimuovere la regola del firewall per il mio computer locale per accedere al database SQL di Azure, per vedere avrei ottenuto un'eccezione simile, ma l'eccezione generata era ovviamente legata al firewall.
Ho anche provato ad aggiungere la stringa di connessione SQL Azure tramite il portale di gestione di Azure (anche se non ho visto come specificare il provider) - inutile dire che ho ottenuto lo stesso "Formato dell'inizializzazione ... "eccezione menzionata sopra.
mia stringa di connessione nel web.config è nel seguente formato:
<add name="[my connection name]"
connectionString="Server=tcp:abc123.database.windows.net,1433;Database=[my database];User ID=[my login]@abc123;Password=[my password];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
providerName="System.Data.SqlClient" />
Qualsiasi suggerimento sarebbe molto gradita.
Nice catch sul costruttore UsersContext. –
Si sta utilizzando l'aggiornamento del database di distribuzione Web? C'è una casella di controllo se vuoi aggiungere la stringa di connessione al progetto. – kvetis