von Manfred,
2. January 2011 19:33
Holger Sirtl von Microsoft Deutschland hat hier [1] einen netten Blog-Eintrag verfasst, welcher beschreibt, wie man eine Azure-Anwendung mit ein paar Zeilen Code dazu bringen kann, nach gewissen Regeln automatisch mehr Instanzen anzufordern.[1] http://blogs.msdn.com/b/hsirtl/archive/ ... itung.aspx
von Manfred,
2. January 2011 02:37
Seit ich auf Azure SDK 1.3 umgestellt habe, habe ich beim Lesen der Role-Konfiguration mittels RoleManager.GetConfigurationSetting eine SEHException bekommen. Der Grund war, dass ich vor einiger Zeit festgelegt habe, dass mein IIS (64 Bit) auch 32 Bit-Prozesse ausführen darf. Damit kommt das SDK 1.3 beim Ausführen von Web-Applikationen in der Dev-Fabric offensichtlich nicht klar [1]. Lösung 1: 32 Bit-Unterstützung deaktivieren Dazu ist die folgende Anweisung als Admin auf der Konsole auszuführen:%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:false Lösung 2: Die Verwendung von IIS durch die Dev-Fabric deaktivieren Dazu ist das XML-Element Sites inkl. aller Unterelemente in der ServiceDefinition.csdef für die Arbeit mit der Dev-Fabric auszukommentieren.[1] http://social.msdn.microsoft.com/Forums ... cb20b38c1d
von Manfred,
1. January 2011 03:15
Bei der Arbeit mit Azure trat plötzlich beim Starten des Web-Projekts die Fehlermeldung CommunicationObjectFaultedException was unhandled auf. Es hat sich dann herausgestellt, dass ab Azure SDK 1.3 die web.config nicht schreibgeschützt sein darf [1, 2], was bei nicht ausgecheckten Dateien jedoch der Fall ist. Lösung: Datei auschecken und Solution starten. Mehr dazu findet sich unter [3].[1] http://social.msdn.microsoft.com/Forums ... 52abfe2a9e[2] http://code-inside.de/blog/2010/12/03/f ... ted-state/[3] http://blogs.msdn.com/b/windowsazure/ar ... -core.aspx
von Manfred,
17. November 2010 15:26
Das nachfolgende Azure/C#-Beispielprojekt zeigt, wie man ohne Transaktionen mit den Azure Storage-Services (zeitlich verzögerte) Konsistenz sicherstellen kann. Demonstriert wird dies anhand zwei TableStorage-Entitäten, Profiles und Postings: Pro Profile (Benutzerprofil) kann es mehrere Postings geben, wobei das letzte Posting, sowie die Anzahl der Postings auch im Profil redundant gespeichert werden. Somit müssten eigentlich Transaktionen verwendet werden. Allerdings gibt es die in TableStorage, u. a. aus Skalierungsgründen (siehe mein letztes Posting), nicht.Zeitlich verzögerte Konsistenz kann aber auch mit Hilfe von Message-Queues hergestellt werden. Zum einen wird eine Message mit den zu ändernden Einträgen in Profiles und Postings in eine Queue geschrieben. Da dies nur eine Anweisung benötigt, handelt es sich hierbei um eine atomare Aktion. Die Nachricht wird gelesen und die Änderungen werden durchgeführt.Scheitert dies, so wird die Nachricht _nicht_ aus der Queue gelöscht und das System befindet sich nun in einem inkonsistenten Zustand. Allerdings wird dann die Nachricht nach einiger Zeit wieder gelesen und bearbeitet. Somit sollte, sofern es sich nicht um einen Software-Fehler handelt, irgendwann die beiden Tabellen aktualisiert und das System somit wieder konsistent werden.Auf zwei Dinge muss geachtet werden:- Die Aktionen müssen Idempotent sein- Poison-Messages müssen erkannt werdenUpdates sollten per se idempotent sein, sofern kein anderer zwischenfunkt. Letzteres wird aber durch optimitische Concurrency-Checks von den Table-Services verhindert. Inserts müssen als InsertOrUpdate oder InsertOrDoNothing implemeniert werden und die ID muss von Anfang an bekannt sein, um zu verhindern, dass sie doppelt vorkommen. Die Tatsache, ob die Anzahl der Postings im Profil bereits erfolgreich hochgezählt wurde, muss auch irgendwo vermerkt werden um ein mehrfaches hochzählen für ein Posting zu vermeiden. Dafür wird eine Spalte in der Entität Profiles verwendet. Poison-Messages sind Nachrichten, die immer wieder zum Scheitern der damit assoziierten logischen Transaktion führen. Diese werden durch den Dequeue-Count erkannt, der pro Abrufen aus der Queue automatisch hochgezählt wird. Überschreitet dieser den Wert 10 wird die Nachricht nicht mehr bearbeitet, sondern in eine Poison-Queue verschoben.http://www.softwarearchitekt.at/downloads/Twittr.zip