Qualche tempo addietro usando l'SDK Microsoft.Azure.Mobile.Client in una app Xamarin.Forms che lavora eseguendo sync dei dati con modalità off-line, mi sono accorto della presenza di alcuni errori HTTP Error 412.0 - Precondition Failed.

Il codice usa un backend scritto in C# e Azure Sql Server: nulla di esotico o particolare: classica logica di funzionamento esposto da tutte le best practice e codice di esempio Microsoft.

Comunque investigando ho potuto verificare che in realtà anche in presenza di questa segnalazione tutto funzionava in modo corretto: il sync veniva eseguito compiutamente e I dati erano correttamente presenti in Sql Azure. Inoltre, come recita la dicitura, si tratta di pre-errori........

Comunque la cosa mi ha incuriosito e investigando sulle origini della segnalazione sopra ho compreso cosa succede “dietro le quinte” dell'optimistic concurrency features in Azure Mobile Services client SDK.

In questo post Vi presento i miei appunti di studio, preceduti da un mimimo di teoria.Ovviamente per saperne di più potete vedere i link più interessanti che ho trovato e che ho inserito diligentemente in Linkografia.

Le moderne applicazioni sono in grado di esporre lo stesso set di dati a più utilizzatori, che possono eventualmente fare delle modifiche su di esso: questo possibilità introduce dei problemi relativi alla gestione della concorrenza di dette modifiche, e che possono avvenire sulle stesse tuple.

Questo post mi serve come memento, e per condividre con altri che possono avere lo stesso problema: consumare da C# un web service SOAP con autenticazione Pre-Emptive tipo basic.

Poche parole su SOAP: è un protocollo utilizzato per lo scambio di messaggi tra software diversi. Utilizzare un tale servizio da C# è molto semplice: basta aggiungere da Visual Studio un reference fornendo i dati identificativi.... e voilà.. il gioco è fatto.. o quasi.

Esistono molti modi per autenticarsi al servizio (se richiesto, come lo è nella maggior parte delle volte): in generale è abbastanza rognoso trovare il metodo e il codice relativo codice corretto, sopratutto se si esce dal mondo prettamente WCF.

Spesso basta agire sul file config, agendo sui vari nodi di bindings, ma spesso non basta.

In questo caso ho dovuto aggiungere all'header della richiesta una voce Authorization formattata ad hoc.


Lo sapete che l'invenzione del fax è addirittura di metà dell'800 ? Lo sapete che questa stramaledetta tecnologia l'abbiamo ancora oggi "tra i piedi" dopo ben 150 anni ?

Io non ho nulla contro il fax di per sè: sono cresciuto negli anni '80, dove avere il fax a casa era il sogno di ogni geek.

Mi ricordo distintamente che gli appassionati di tecnologia si dividevano tra i possessori di fax in abitazione... e gli sfigatissimi come il sottoscritto che potevano vedere il fax solo in qualche ufficio.

Inutile dire che il costo di un apparecchio del genere era, ovviamente, "importante": occorre anche sapere che all'epoca le telefonate non erano così a buon mercato come ora.

Però che ancora oggi si usi il fax per trasmettere documenti è una cosa incredibile !

Per quanto uno si sforzi di proporre centralini tecnologicamente avanzati, come per esempio Asterisk, ci si imbatte sempre negli stramaledetti fax, che spesso fanno le bizze con i sistemi Voip.

In questa serie di post ho messo insieme un pò di consigli e idee su come risolvere o migliorare la situazione.

Nel testo ci si riferisce ad Asterisk, ma le stesse idee e valutazioni possono essere adottate anche con centralini Voip di altra fattura.

Io uso tantissimo VirtualBox. Per esempio mi permette di creare reti virtuali a cui connetto macchine di diversi sistemi operativi per fare test e verifiche. In caso di emergenza posso creare al volo un centralino Asterisk su cui spostare il traffico qualora l'hardware ufficiale abbia dei problemi.

Comunque quando si "traffica" nei sistemi operativi guest si può arrivare a un punto in cui l'hard disk virtuale raggiunge dimensioni ragguardevoli: nel caso si voglia recuperare dello spazio potete seguire il mio tutorial How to compact VirtualBox’s VDI file size.