2011. szeptember 6., kedd

Azure Table storage a gyakorlatban

Aki ismerkedik az Azure-ral – még, ha régi motoros is – óhatatlanul szembesül a klasszikus iskolai kérdéssel: Mi az a …, és mire használható. Ilyen “jelenség” az Azure Table Service is, ami a 3 újfajta tárolási lehetőség egyike.

Az ismerkedés első napján máris sikerült kifektetni a Development Storage Emulátort. Órákig refaktoráltam a kódot, próbáltam kitalálni, hogy vajon mi lehet az oka, hogy az emulátor nem válaszol (!) semmilyen kérésre egy entitás beszúrása után. Pontosabban fogalmazva: egy sikertelen beszúrás után, amelyre a teljesen üres táblát tartalmazó emulátor válasza, hogy

System.Data.Services.Client.DataServiceClientException: 
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/
dataservices/metadata
"> <code>InternalError</code> <message xml:lang="hu-HU">Server encountered an internal error.
Please try again after some time
.</message> </error>

Először megszüntettem minden öröklődést. Már csak egy darab árva entitásom volt, amely egyszerűbb volt, mint a Hello World példa, mégis a fenti üzeneteket kaptam, és a storage emulátor többet nem volt képes válaszolni. Egyszerűen meghalt. Az Azure Storage Explorer a következőt tudta csak mondani:

image 

Minden ilyen próbálkozás után használhatatlanná vált az egész development storage emulator. Szerencsére van egy ilyen gomb: Reset…

image

A gombot megnyomva “lenullázhatjuk” az egész storage-ünket…Azért ez egy éles alkalmazásnál nem nyugtatna meg… Szerencsére csak fejlesztgetünk egyelőre.

Lényeg, hogy a sok-sok megkötés mellett van még egy: a storage emulátor nem bírja a DateTime.MaxValue értéket… Ennek az oka alapvetően egyszerű: a Table Service UTC dátumokkal dolgozik. Így, ha egyszerűen a MaxValue értéket állítjuk be a változó értékének, akkor a DateTime.Kind tulajdonsága Unspecified lesz, azaz meghatározatlan. Ilyen esetben az időt konvertálni fogja a rendszer UTC-be. Ami ugye ilyen módon később van, mint a megengedett maximum.

Az eset rém egyszerűen elkerülhető, ha az alábbi módon adjuk meg a maximum dátumot: DateTime.MaxValue.ToUniversalTime(); Illetve általában figyelnünk kell arra, hogy minden dátum át lesz konvertálva UTC-be. Bár ez nem hiszem, hogy a MaxValue érték 2 órás körzetén kívül bárkit is zavarna Magyarországon.

Az ilyen apróságok mellett a véleményem továbbra is az, hogy az  Azure Table Storage nagyon jó dolog. Erőltetem is rá a fejlesztést, annak ellenére, hogy még egy kicsit még fapados.

Nincsenek megjegyzések:

Megjegyzés küldése