Workflow Foundation Activity Pack CTP1 pentru Windows Azure

Tocmai a fost anunțat Workflow Foundation Activity Pack pentru Windows Azure CTP 1. Proiectul dedicat lui Workflow Foundation pe CodePlex este http://wf.codeplex.com/, iar pachetul este disponibil și prin NuGet (sau pentru cei mai hardcore, în consola de management de pachete pot butona Install-Package WFAzureActivityPack).

Ca și implementare, Activity Pack se bazează pe Windows Azure SDK, update-ul din August 2011, ce trebuie descărcat pentru a testa pachetul. În plus, activitățile se bazează pe Windows Azure Storage Service și Windows Azure AppFabric Caching Service, ce permit accesul la servicii lui Windows Azure în cadrul unei componente/aplicații bazate pe workflow-uri.

Tot la implementare trebuie menționat faptul că deși activitățile pot fi folosite într-un workflow și se bazează pe Windows Azure Storage Service/Windows Azure AppFabric Caching Service, acestea nu au implementare pentru tratarea excepțiilor într-un mod special. Toate excepțiile sunt conforme cu API-ul furnizat de Windows Azure Service. Cu alte cuvinte, dacă GetBlob (una din activitățile ce permit descărcarea unui blob) încearcă să acceseze un blob ce nu există, va fi aruncată o excepție de tipul StorageClientException.

Ca și best practice pentru CTP-ul curent (am testat-o) trebuie să fim pregătiți pentru orice potențială excepție și la nivel de workflow-uri să includem activitățile specifice Windows Azure în cadrul activității de TryCatch.

În versiunea curentă, la nivel de API, avem următoarele activități (sursa Windows Azure Blog):

 

1. Pentru Windows Azure Storage Service – Blob

  • PutBlob crează un bloc de blob-uri sau înlocuiește unul existent
  • GetBlob descarcă conținutul binar al unui blob
  • DeleteBlob șterge un blob dacă acesta există
  • CopyBlob copiază un blob într-o altă zonă în cadrul contului de storage
  • ListBlobs enumerează lista de blob-uri dintr-un container sau dintr-un director din cadrul unei ierarhii

 

2. Pentru Windows Azure Storage Service – Table

  • InsertEntity<T> introduce o nouă entitate într-o tabelă specifică
  • QueryEntities<T> interoghează entitățile dintr-o tabelă conform unei interogări (luând în considerare și opțiunile de interogare)
  • UpdateEntity<T> actualizează o entitate (existentă) din cadrul unei tabele
  • DeleteEntity<T> sterge o entitate (existentă) din cadrul unei tabele, specificând obiectul acelei entități ca și parametru
  • DeleteEntity șterge o entitate (existentă) din cadrul unei tabele, folosind cheile de partiție și rând

 

3. Pentru Windows Azure AppFabric Caching Service

  • AddCacheItem adaugă un obiect în cache, sau actualizează un obiect existent în cache
  • GetCacheItem întoarce un obiect din cache, cu tot cu timpul de expirare al acestuia din cadrul cache-ului
  • RemoveCacheItem șterge un obiect din cache.

 

Un scenariu (primul la care mă gândesc), destul de interesant, care se pretează atât pentru Windows Azure, cât și pentru utilizarea acestor activități în cadrul unei aplicații bazate pe workflow-uri este de a face trace-ul și log-ul a tuturor proceselor dintr-o soluție complexă de tip SaaS. Avantaje sunt foarte multe: spațiu infinit (2 TB per cont de storage), posibilitatea de a interoga rapid informațiile înregistrate, back-up + failover asigurat.