2012-10-02 11 views
21

Ci troviamo di fronte a qualche problema con la versione distribuita della nostra applicazione su cloud.SQL Azure + Errore "C'è già un DataReader aperto associato a questo comando ..", anche dopo aver impostato "MultipleActiveResultSets = True"

La nostra applicazione è un progetto ASP.NET MVC 3 con ADO .NET Entity Framework.

In base ai blog msdn, è necessario aggiungere il parametro "MultipleActiveResultSets = True" (per Entity Framework con SQL azzurro) nella nostra stringa di connessione al database che abbiamo giustamente fatto.

otteniamo la seguente eccezione durante l'esecuzione di una query di database dalla nostra applicazione: '' Esiste già un DataReader aperto associato con questo comando che deve essere chiuso prima “, che credo sia molto relativa ai. 'MultipleActiveResultSets = True 'proprietà.

L'applicazione funziona perfettamente nell'ambiente locale con il nostro database distribuito localmente e utilizzando il database SQL di Azure (in ambiente locale).

Ma quando distribuiamo la nostra applicazione di cloud otteniamo l'errore sopra menzionato. Sembra che la proprietà 'MultipleActiveResultSets = True' non venga letta dalla stringa di connessione.

La stringa di connessione che sto usando è la seguente:

<connectionStrings> 
     <add name="#DBInstanceName#" connectionString="Data Source=tcp:#server#.database.windows.net,1433;Initial Catalog=#DBName#;User ID=”UserName#@#server#;Password=”#password#”;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 

io sono in grado di connettersi al database SQL Azure utilizzando la stringa di connessione sopra dall'applicazione distribuito a livello locale, senza alcuna eccezione. Ma la stessa applicazione, quando distribuita su cloud utilizzando la stessa stringa di connessione, mi dà l'errore sopra citato.

Potete aiutarci a risolvere lo stesso?

+0

È possibile verificare la stringa di connessione utilizzando [** Azure Legacy Portal **] (https://windows.azure.com/) o [** Azure Preview Portal **] (https: //manage.windowsazure .com /) configurazione di distribuzione? È anche possibile [configurare Accesso remoto e connettersi tramite RDP] (http://msdn.microsoft.com/en-us/library/windowsazure/gg443832.aspx) per visualizzare il 'web.config' direttamente per ogni ruolo pubblicato. – SliverNinja

risposta

3

Non è necessario impostare multipleresultsets = true nel connectionsstring e riavviare.

Rimosso risposta

Edit: Questo è discusso! Controlla il commento sotto ... Non ho avuto il tempo di cercare ...

Penso che sia già acceso.

non ho potuto trovare un posto-on fonte, ma Faisal Mohamood (Program Manager, Entity Framework) afferma quanto segue nel 2010: "Inutile dire, faremo in modo che Marte viene attivata automaticamente per SQL App basate su Azure quando ci spostiamo per rilasciare il prossimo aggiornamento al prodotto ". Trovato qui: http://blogs.msdn.com/b/adonet/archive/2010/06/09/remember-to-re-enable-mars-in-your-sql-azure-based-ef-apps.aspx

+0

Sembra non essere ancora installato ... necessario aggiungere MultipleActiveResultSets = True alla stringa di connessione del sito Web di Azure, come descritto da "irium" –

38

Ho appena avuto lo stesso problema. Ho provato a impostare "MultipleActiveResultSets = True" nella connessione Web.config - nessun risultato. Infine ho risolto il problema modificando manualmente la stringa di connessione direttamente in Azure Dashboard per il sito Web: nella scheda "Configura" sono presenti le impostazioni "Stringhe di connessione" in cui è necessario aggiungere manualmente "MultipleActiveResultSets = True;" stringa. Dopo aver fatto ciò, MARS ha lavorato finalmente.

+2

Inoltre, è necessario riavviare il sito Web dopo aver modificato la stringa di connessione. –

+0

Grazie per la risposta. Stavo usando Visual Studio per gestire diversi ambienti e le stringhe di connessione erano corrette. Il sito Web My Test utilizzava la trasformazione Web Config da Visual Studio anche se la mia produzione sembra essere stata compromessa da Azure. Mi piacerebbe disabilitare Azure e gestire tutto da trasformazioni di Config in VS 2012. – darwindave

+1

Funziona! Apparentemente, anche l'accesso al file web.config tramite FTP e l'impostazione di 'MultipleActiveResultSets = True' non funziona. Questo è l'unico metodo che sembra tagliarlo. – Ben

0

Ho lo stesso problema, ma ho risolto MultipleActiveResultSets = True nella stringa di connessione da pubblicare assistente, come Irium

11

In alternativa è possibile aggiungere il "MultipleActiveResultSets = true" per la stringa di connessione e aggiornare il Web di destinazione. config quando si utilizza la funzionalità Pubblica in Visual Studio. Assicurati di selezionare "Usa questa stringa di connessione in fase di esecuzione (aggiornamento destinazione web.config)." enter image description here

+1

E 'stato! La stringa di connessione era obsoleta per qualche motivo .. Grazie! –

+1

questa è la strada da percorrere, io uso sempre questo metodo e funziona perfettamente, – pomarc

1

Siamo sul nuovo portale di Azure e abbiamo avuto anche questo problema. MARS ha funzionato su tutti gli ambienti di sviluppo locali, ma ha gettato la stessa brutta eccezione su Azure. Abbiamo verificato che la stringa di connessione nel file web.config fisico distribuito in Azure contenesse MultipleActiveResultSets=true; ma non sembra essere onorato dall'applicazione. In ultima analisi, ciò che ha funzionato era l'istanza del servizio app> impostazioni> connessioni dati e l'eliminazione della connessione dati con lo stesso nome di quella in questione nel web.config. La mia ipotesi è quella che gli archivi di Azure superano quello del web.config distribuito.

Problemi correlati