2015-09-01 20 views
7

Ricevo improvvisamente l'errore Bad Request (400) quando si utilizza l'Emulatore di archiviazione di Azure quando si tenta di CreateIfNotExists. La risposta sull'eccezione interna dice "Il valore per una delle intestazioni HTTP non è nel formato corretto". Tutte le tabelle esistono, i dati sono nelle tabelle, tutto stava funzionando fino a un aggiornamento dei miei pacchetti NuGet. Guardando intorno a SO sembra che una causa comune sia un aggiornamento di Azure Storage Client Library (ora alla 5.0.0) che crea una mancata corrispondenza. Ho aggiornato Azure SDK a 2.6 (poiché ho VS2012). Questo porta l'emulatore di memoria fino alla 4.0.0.0, ma ancora non ha fortuna ... lo stesso errore. Questa è una cosa brutta che improvvisamente un aggiornamento di un pacchetto di un pacchetto di un pacchetto fa sì che tutto si rompa e uccide completamente il mio progetto piuttosto grande. Qualche idea?Azure Storage Emulator 400 Richiesta errata

+0

Quale versione della libreria del client di archiviazione si sta utilizzando nel progetto? –

+0

5.0.0 Ho anche provato la nuova pre-release ma non ha funzionato neanche. – WirelessG

risposta

5

Non so se questo è un problema per chiunque altro, ma questo è quello che ho capito ...

  • bagagli emulatore 4.1.0.0 è quello da usare con Azure Client Library 5.0.0
  • Storage Emulator 4.1.0.0 viene fornito con Azure SDK 2.7.
  • Azure SDK 2.7 non funziona con Visual Studio 2012.
  • Azure SDK 2.6 per VS2012 ha Emulator 4.0.0.0. Non so cosa sia la libreria client di archiviazione compatibile ... Ho provato 4.3.0.0, 5.0.0.0 e 5.0.2, ma non ho avuto fortuna

.

I miei problemi "filosofiche" con tutta questa storia sono ...

  • posso trovare alcun collegamento visibile tra bagagli emulatore versioni e le versioni bagagli client libreria .... i numeri non " incontro"; non ci sono errori, dipendenze o eccezioni che diano a la relazione; Non riesco a trovare alcun riferimento, riferimento incrociato o tabella che descrive la combinazione corretta di librerie.
  • La teoria "usa solo la versione più recente" non funziona perché nel passato hanno rilasciato nuove versioni della libreria Client di archiviazione (3.0.0.0) con un emulatore funzionante e ora "l'ultima versione" di ogni è a parte dipende da quale SDK è disponibile per la build ambiente (VS2012 vs VS2015)

capisco la libreria client di archiviazione non è tecnicamente "dipendente" sull'emulatore ... non è necessario l'emulatore per utilizzare Archiviazione di Azure.Tuttavia, sarebbe bello se alcune di queste relazioni fossero un po 'più semplici per un software come me da capire.

+2

Sembra che Storage Client Library 6.0.0 utilizzi la versione 2015-04-05 dell'API REST, che è supportata solo nell'emulatore versione 4.2. –

+1

Qualcun altro con lo stesso identico problema e la risposta dal team di Azure qui https://github.com/Azure/azure-storage-net/issues/183 è l'aggiornamento all'emulatore di memoria versione 4.2. –

0

Se non erro, è necessario eseguire il downgrade delle librerie client su 4.x.

Vedete, ogni versione della libreria del client di archiviazione corrisponde a una versione dell'API REST del servizio di archiviazione e lo stesso vale per l'emulatore di archiviazione. Se si utilizza l'emulatore di memoria versione 4.0, non è possibile utilizzare la libreria client di archiviazione 5 con quella. Dovresti usare la versione 4.x con quella.

Se si desidera utilizzare il client di archiviazione della libreria versione 5, allora si hanno 2 opzioni: Usa

  1. Marchio di ultima versione di emulatore di archiviazione o
  2. fare il vostro sviluppo contro account di archiviazione cloud.
+0

L'emulatore di archiviazione fa parte di Azure SDK. Se hai VS2012, l'SDK è 2.6. L'emulatore di memoria per 2.6 è 4.0.0.0. L'ultima libreria client di archiviazione è 5.0.0. Quindi stai dicendo che devi aggiornare l'SDK 2.7 (e quindi VS2015) per ottenere una versione di Emulator che funzioni con Client Library 5.0.0.0? Sembra una cattiva backdoor per costringere le persone ad aggiornare Visual Studio senza che loro lo sappiano. – WirelessG

+0

Sì. Per utilizzare l'ultima versione dell'emulatore di archiviazione, è necessario l'ultimo SDK (2.7) supportato su VS 2013 e 2015 (non VS 2012, purtroppo). –

+0

Inoltre, il downgrade della libreria del client di archiviazione su 4.3.0.0 (per "abbinare" il mio emulatore 4.0.0) non funziona. Nessuna eccezione, solo ogni chiamata restituisce un "falso" silenzioso. – WirelessG

10

Nel mio caso, il problema era con il Nome contenitore, che ha requisiti di denominazione rigidi.

Vale a dire:

  • Solo minuscole lettere, numeri e trattino sono permessi
  • Deve essere da 3 a 63 caratteri

Per ulteriori informazioni, guarda Naming and Referencing Containers, Blobs, and Metadata su MSDN.