2012-11-24 12 views
9

Durante l'utilizzo di Windows Azure Storage Table in WCFService WebRole, ha cercato di creare CloudStorageAccount dal seguente senso: eccezioneImpossibile creare Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener

storageAccount = 
CloudStorageAccount.Parse(Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting("[Setting name]")) 

Get:

ConfigurationErrorsException " Impossibile creare Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Versione = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35. "

MSDN help dice che 1) Visual Studio deve essere eseguito come amministratore. 2) Un ruolo deve essere in esecuzione con piena attendibilità (modificare l'opzione del livello di attendibilità .NET su Full Trust).

Tutto fatto, ma ho ancora la stessa eccezione.

risposta

20

Una cosa che può causare questo errore è eseguire il ruolo web stesso, invece di eseguire il progetto di cloud contenente. Se questo è il problema, è possibile correggerlo assicurandosi che il progetto cloud sia impostato come progetto di avvio per il debug e non il ruolo web.

È possibile, e talvolta utile, eseguire il progetto ASP.NET che definisce il ruolo Web da solo. Questo può essere molto più veloce rispetto a eseguire le cose nell'emulatore di calcolo di Azure. Potrebbe anche consentirti di sviluppare il tuo progetto senza dover eseguire VS elevato. Inoltre, ho trovato che l'emulatore tende a far sì che Visual Studio segnalasse di volta in volta un errore di accesso alla memoria non valido, a quel punto è necessario riavviare VS. L'esecuzione del ruolo Web evita direttamente tutti questi problemi.

Tuttavia, ci sono alcune cose che possono impedire il corretto funzionamento e l'eccezione descritta è un sintomo di uno di questi problemi. Se il ruolo del tuo sito web Web.config include la configurazione per Azure DiagnosticMonitorTraceListener (e Visual Studio lo aggiunge per impostazione predefinita quando si crea un ruolo Web), la prima cosa che tenta di generare l'output di traccia si interromperà con l'errore che si descrive se si esegue all'esterno dell'emulatore. E come succede, il recupero di un'impostazione dal numero CloudConfigurationManager sembra farlo.

Questo non è peculiare allo CloudConfigurationManager a proposito. Tutto ciò che sta facendo è produrre qualche traccia di output. VS configura i ruoli Web per inviare tutto l'output di traccia al listener diagnostico di Azure e, poiché tale listener può essere eseguito solo nell'emulatore di elaborazione o in un'istanza di Azure effettiva, la prima cosa che tenta di produrre l'output di tracciamento si interromperà. CloudConfigurationManager è un candidato comune perché produce output di analisi e in genere viene utilizzato nelle prime fasi all'avvio di un ruolo. Ma in linea di principio, tutto ciò che produce output di tracciamento potrebbe colpire questa eccezione.

Un modo semplice per evitare ciò è rimuovere la sezione pertinente dal file di configurazione. Quando si crea un nuovo ruolo Web, Visual Studio aggiunge una sezione <system.diagnostics> che configura l'output di traccia predefinito per passare al listener diagnostico di Azure. Potresti semplicemente commentarlo. Ciò consentirà di eseguire il debug del ruolo Web direttamente in Visual Studio senza utilizzare l'emulatore di calcolo (presupponendo che non si stia facendo nulla che dipenda dall'essere in un ambiente di ruolo).

Ovviamente, il problema è che non si otterranno più tracce di diagnostica durante l'esecuzione in Azure. Un modo per risolvere questo è spostare la configurazione pertinente nel file Web.config.Release (aggiungendo gli attributi xdt: necessari).

Questa modifica interromperà l'esecuzione del listener di analisi diagnostico di Azure quando si utilizza l'emulatore di elaborazione locale. (Questo è meno di un problema, perché i messaggi di traccia continueranno a comparire nel debugger. Significa semplicemente che non otterrete copie persistenti delle tracce copiate nell'archivio della tabella come fareste con la realtà.) Il modo ovvio per risolvere questo problema sembrerebbe essere di fare una modifica simile a Web.config.Debug (o di eseguire la versione di rilascio nell'emulatore), ma c'è un problema: apparentemente i progetti cloud non applicano le trasformazioni di file di configurazione quando si esegue il packaging per l'emulatore per impostazione predefinita. Fortunatamente, è possibile risolvere questo problema: http://blog.hill-it.be/2011/03/07/no-web-config-transformation-in-local-azure/ mostra come abilitare le trasformazioni per il debugging locale nell'emulatore di elaborazione. (Le trasformazioni non sono mai applicate durante il debug di un progetto ASP.NET direttamente da VS, tra l'altro.)

+0

Ho riscontrato questo problema durante l'aggiornamento di Azure SDK dalla v2.0 alla v2.1. Ha cambiato automaticamente il mio progetto di avvio dal progetto cloud al progetto di ruolo web senza dirmelo. La modifica ha risolto il problema. – Bern

0

ho trovato che questo errore è causato dalla versione sbagliata nel web.config

Ie. , non si può avere Version=1.0.0.0

Microsoft.WindowsAzure.Diagnostics è fino alla versione 1.8.0.0 fin d'ora

aggiornamento Prova alla versione corrente

0

Rimuovere t le righe in Web.config < aggiungi type = "Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener

Problemi correlati