<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Il blog del team MSDN Italia</title><link>http://blogs.msdn.com/b/italy/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>How to: Riattivare le macchine virtuali di Windows Azure dopo aver riattivato una sottoscrizione bloccata</title><link>http://blogs.msdn.com/b/italy/archive/2013/06/17/how-to-riattivare-le-macchine-virtuali-di-windows-azure-dopo-aver-riattivato-una-sottoscrizione-bloccata.aspx</link><pubDate>Mon, 17 Jun 2013 09:58:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10426347</guid><dc:creator>Eva Gjeci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10426347</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/06/17/how-to-riattivare-le-macchine-virtuali-di-windows-azure-dopo-aver-riattivato-una-sottoscrizione-bloccata.aspx#comments</comments><description>&lt;p&gt;Se vi capita di superare la soglia di utilizzo delle risorse di Windows Azure associate alla vostra sottoscrizione, per esempio i 150 euro di credito mensile della trial o il credito mensile della vostra sottoscrizione MSDN, e ricevete la mail in cui vi viene segnalato che la vostra sottoscrizione è stata disabilitata, nessun PANICO. &lt;/p&gt;  &lt;p&gt;Quello che succede quando raggiungete il limite mensile di risorse gratuite di Windows Azure e non avete precedentemente sbloccato il limite di spesa associato alla vostra sottoscrizione, è che il vostro account di archiviazione viene impostato come read-only. I file VHD delle vostre macchine virtuali rimangono nello storage ma le VM deployate vengono cancellate. Questo viene fatto perchè le macchine virtuali anche se spente riservano capacità computazionale. &lt;/p&gt;  &lt;p&gt;Per poter “ripristinare” i vostri servizi dovete per prima cosa modificare il limite di spesa che è impostato nella vostra sottoscrizione (cosi potete stare TRANQUILLI che i vostri servizi saranno always-on). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7824.Capture1_5F00_746746A8.png"&gt;&lt;img title="Capture1" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Capture1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5618.Capture1_5F00_thumb_5F00_78E05820.png" width="447" height="67" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In seguito potete utilizzare i dischi VHD delle vostre VM per creare una nuova macchina virtuale, seguendo questi passaggi:&lt;/p&gt;  &lt;p&gt;1. Dal portale andate su &lt;b&gt;New&lt;/b&gt; – &lt;b&gt;Compute &lt;/b&gt;- &lt;b&gt;Virtual machine&lt;/b&gt; – &lt;b&gt;From Gallery&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8787.2_5F00_53E297A7.png"&gt;&lt;img title="2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5008.2_5F00_thumb_5F00_234F19EF.png" width="383" height="172" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;2. Nei Dischi personali scegliete il disco che era stato creato per la macchina virtuale precedente&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3365.Capture2_5F00_6C0892B3.png"&gt;&lt;img title="Capture2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Capture2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3718.Capture2_5F00_thumb_5F00_62AF5E30.png" width="416" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;3. Completate gli step successivi per creare la macchina virtuale&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Nota&lt;/b&gt;: Per usare lo stesso DNS che era stato creato per la VM originale, è necessario cancellare il cloud services relativo prima di creare la nuova VM. In caso contrario si ottiene un errore che indica che il DNS è già in uso. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2678.Capture3_5F00_203F4CAB.png"&gt;&lt;img title="Capture3" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Capture3" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2605.Capture3_5F00_thumb_5F00_5ABA4C7F.png" width="422" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In questo modo avrete la vostra macchina virtuale con le stesse configurazioni di quella originale e con tutti i vostri dati. &lt;/p&gt;  &lt;p&gt;Quando lavorate con le macchine virtuali fatte attenzione al disco D: , è un disco temporaneo. Il Temporary Storage (D: ), a differenza del disco OS e del disco dei dati non è persistente sullo storage di Windows Azure. I dati che memorizzate nell’unità D: vengono persi quando la macchina virtuale viene spostata o se avviene un guasto hardware. Anche nel caso illustrato precedentemente, quando vi viene disabilitato il servizio perchè avete superato la soglia limite di risorse gratuite, quando ricreate la macchina virtuale a partire dal file VHD della vostra VM originale, se avete memorizzato dei dati in D:, questi dati non li ritrovate sulla nuova macchina, sono persi.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1184.Capture4_5F00_1EFD447D.png"&gt;&lt;img title="Capture4" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Capture4" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3034.Capture4_5F00_thumb_5F00_177465C1.png" width="439" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;L’unità D: è prevista solo per la memorizzazione dei dati temporanei. Non utilizzate questa unità per memorizzare dati che non volete perdere. &lt;/p&gt;  &lt;p&gt;Di seguito trovate una guida che vi spiega come agganciare dei dichi persistenti alle vostre VM: &lt;a href="http://www.windowsazure.com/en-us/manage/windows/how-to-guides/attach-a-disk/"&gt;http://www.windowsazure.com/en-us/manage/windows/how-to-guides/attach-a-disk/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10426347" width="1" height="1"&gt;</description></item><item><title>Guest post: Windows Azure Service bus Topics, prima esperienza</title><link>http://blogs.msdn.com/b/italy/archive/2013/06/14/guest-post-windows-azure-service-bus-topics-prima-esperienza.aspx</link><pubDate>Fri, 14 Jun 2013 07:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10425428</guid><dc:creator>Vito Flavio Lorusso</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10425428</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/06/14/guest-post-windows-azure-service-bus-topics-prima-esperienza.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Questo post è stato scritto da &lt;a href="https://twitter.com/suxstellino" target="_blank"&gt;Alessandro Alpi&lt;/a&gt;, MVP SQL Server&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;&lt;b&gt;Windows Azure Service bus Topics, prima esperienza&lt;/b&gt;&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.windowsazure.com/"&gt;Windows Azure&lt;/a&gt; fornisce un servizio chiamato Service Bus per implementare il messaging direttamente in cloud. Per avere maggiori informazioni riguardanti il messaging su Azure, &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/hh367516.aspx"&gt;leggere qui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In questi giorni sto pensando a come implementare un notification server e sembra che il servizio suddetto possa proprio essere di aiuto. &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx"&gt;L'articolo&lt;/a&gt; descrive i concetti su &amp;quot;Queues, Topics e Subscriptions&amp;quot;:&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;i&gt;These “brokered” messaging capabilities can be thought of as asynchronous, or decoupled messaging features that support publish-subscribe, temporal decoupling, and load balancing scenarios using the Service Bus messaging fabric. Decoupled communication has many advantages; for example, clients and servers can connect as needed and perform their operations in an asynchronous fashion.&lt;/i&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;Sembra proprio quello che mi serve. Ok, iniziamo a scrivere un progetto di test in modo da capire come si sviluppa una cosa del genere. Sono un dba, quindi apprezzate il mio sforzo e ovviamente, correggetemi ovunque ci fossero imprecisioni &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6558.clip_5F00_image001_5F00_1A595574.gif"&gt;&lt;img title="clip_image001" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image001" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3426.clip_5F00_image001_5F00_thumb_5F00_6EA88B77.gif" width="19" height="19" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Introduzione&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Ci serve un progetto, possibilmente con Visual Studio 2012 (anche se c'è il template per 2010) con almeno tre progetti, il sender, il receiver ed un model con cui lavorare (che poi è il tipo del messaggio). Utilizzeremo il template proposto proprio da Visual Studio per la gestione di Queues (code) per poi convertirlo in uno che utilizza Topics/Subscriptions (Argomenti e sottoscrizioni). Approfondiremo il loro significato più tardi.&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 1 - Prerequisiti&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Di default, la versione corrente di Visual Studio 2012 non fornisce fin da subito. Quindi è necessario scaricare l'SDK direttamente con il web platform installer. Selezionando il linguaggio che si vuole utilizzare (nel mio caso C#), sotto la voce Cloud, è sufficiente fare doppio click sulla voce &amp;quot;SDK Download&amp;quot;. La web platform scaricherà circa 40MB.&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 2 - Nuovo progetto con Visual Studio&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Aggiungendo il progetto cloud (che ho chiamato &lt;i&gt;MessagingTest&lt;/i&gt;), la relativa soluzione verrà creata (&lt;i&gt;MessagingTest&lt;/i&gt; anch'essa). Durante questo processo comparirà un popup in cui ci viene chiesto di scegliere che &amp;quot;Role&amp;quot; aggiungere. Noi avremo bisogno di un &lt;i&gt;Worker Role&lt;/i&gt;, che possiamo definire come un'applicazione di Back-End (se guardate bene, troverete anche Web Role, ovvero una tipica applicazione web di frontend). Il tipo di Worker che andremo ad aggiungere è quello denominato &amp;quot;&lt;i&gt;Worker Role With Service Bus Queue&lt;/i&gt;&amp;quot;. Come si può evincere dal nome, il progetto creerà un gestore per una coda, mentre a noi serve quella a topic (argomenti) e subscriptions (sottoscrizioni). Lo cambieremo in seguito. Intanto ecco il popup di esempio:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2816.clip_5F00_image002_5F00_42F7C17B.png"&gt;&lt;img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4478.clip_5F00_image002_5F00_thumb_5F00_150CFF74.png" width="244" height="99" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il template aggiungerà nel progetto il riferimento a &lt;i&gt;Microsoft.ServiceBus.dll&lt;/i&gt; e i namespace seguenti:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;b&gt;using&lt;/b&gt; Microsoft.ServiceBus;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font size="2"&gt;&lt;b&gt;using&lt;/b&gt; Microsoft.ServiceBus.Messaging;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Sono stati aggiunti anche due tipi di file &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/ee758710.aspx"&gt;.cscfg&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/ee758711.aspx"&gt;.csdef&lt;/a&gt; (il cosiddetto Windows Azure Service Configuration System) sul progetto cloud. Questi file determinano la connection string per connettersi al NAMESPACE, preventivamente creato per utilizzare il service bus. In poche parole andremo a creare un endpoint al quale invieremo messaggi alla nostra struttura (Topic per noi), utilizzando la connection string e la chiave generata direttamente dal &lt;a href="http://www.windowsazure.com/"&gt;Windows Azure Portal&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 3 - Configurazioni&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Prendiamo ora il file&lt;i&gt; ServiceConfigurationLocal.cscfg&lt;/i&gt; nel progetto cloud e andiamo a cambiare la connection string. Supponendo di avere un namespace &amp;lt;mynamespace&amp;gt; e una &amp;lt;key&amp;gt; formeremo una connection string così fatta:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;&lt;font size="2" face="Consolas"&gt;Endpoint=sb://&amp;lt;mynamespace&amp;gt;.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=&amp;lt;key&amp;gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ecco la procedura per &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/hh690931.aspx"&gt;creare la chiave direttamente dal portale&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 4 - Creazione del modello di messaggio&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Andiamo ora a creare un progetto di tipo Class Library che chiameremo &lt;i&gt;MessagingModel &lt;/i&gt;e che conterrà la struttura del messaggio con cui vogliamo lavorare. Possiamo parlare di &amp;quot;&lt;i&gt;Tipo del messaggio&lt;/i&gt;&amp;quot;. Aggiungiamo il progetto alla stessa soluzione:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1033.clip_5F00_image003_5F00_1D905EBE.png"&gt;&lt;img title="clip_image003" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image003" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3113.clip_5F00_image003_5F00_thumb_5F00_5AB41A43.png" width="244" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il modello che andremo a creare è il seguente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5126.clip_5F00_image004_5F00_1124CC46.png"&gt;&lt;img title="clip_image004" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8484.clip_5F00_image004_5F00_thumb_5F00_5C8700BB.png" width="244" height="105" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tre semplici proprietà che descrivono la struttura del nostro messaggio di notifica. Come possiamo vedere al progetto è stato aggiunto un file&lt;i&gt; NotificationModel.cs&lt;/i&gt; in cui abbiamo definito appunto, la struttura del messaggio.&lt;/p&gt;  &lt;p&gt;Il modello verrà referenziato dal Worker Role (perchè dovrà ricevere il messaggio e tipizzarlo per gestirlo) e dal Sender (luogo in cui il messaggio verrà composto per l'invio).&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 5 - Preparare il message receiver (Worker Role)&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Quando creiamo questo tipo di progetto, buona parte della struttura è praticamente completa. Ci sono già tre metodi, &lt;i&gt;OnStart()&lt;/i&gt;, &lt;i&gt;OnStop()&lt;/i&gt; e&lt;i&gt; Run()&lt;/i&gt;. Abbiamo già la definizione della coda, la sua creazione, il caricamento delle configurazioni, la parte in cui si riceve il messaggio e così via. Sembra semplice, sì vero, ma ovviamente questo è un progetto di demo. Quando dovremo mettere mano, in base alle specifiche del consumer dell'item della coda, il progetto potrebbe complicarsi notevolmente. Pensate infatti alle varie logiche da applicare per lo smistamento e la gestione del messaggio, oppure all'applicazione di un log o di procedure di auditing, di cache e così via. In aggiunta, è possibile cambiare anche le specifiche di lettura (abbiamo &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/hh780735.aspx"&gt;PeekLock&lt;/a&gt; o &amp;quot;lettura non distruttiva&amp;quot; e la &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/hh780756.aspx"&gt;ReceiveAndDelete&lt;/a&gt; o &amp;quot;lettura distruttiva&amp;quot;).&lt;/p&gt;  &lt;p&gt;Tuttavia il progetto creato, come dicevamo, gestisce una coda e non un Topic/Subscriber. Lo scopo di questo post è convertire il tipo fornito nativamente in uno a Topic. Per capire la differenza, ecco due immagini:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Queues (code)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4048.clip_5F00_image005_5F00_0C44A93B.png"&gt;&lt;img title="clip_image005" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image005" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6201.clip_5F00_image005_5F00_thumb_5F00_496864C0.png" width="244" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I vari sender inviano un messaggio alla coda, e il consumer legge un messaggio. Ogni messaggio è processato da un consumer solo alla volta.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Topics (argomenti)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2746.clip_5F00_image006_5F00_64348ACC.png"&gt;&lt;img title="clip_image006" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image006" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1803.clip_5F00_image006_5F00_thumb_5F00_21584652.png" width="244" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I sender inviano i messaggi al topic e ogni consumer crea una sottoscrizione, creando, di fatto, una relazione &lt;b&gt;uno a molti&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Ora passiamo al refactor del Worker role, partendo dalla testata, come impostarla?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Avremo bisogno di un nome &lt;i&gt;topic&lt;/i&gt;, di un nome &lt;i&gt;sottoscrizione &lt;/i&gt;e il &lt;i&gt;client&lt;/i&gt; per gestire la messaggistica:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;public class WorkerRole : RoleEntryPoint&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;const string TopicName = &amp;quot;MyFirstTopic&amp;quot;; // Topic name&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;const string SubscriptionName = &amp;quot;MySubscription&amp;quot;; // Subscription name&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// client for managing messages&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;SubscriptionClient Client;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// stop flag&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;bool IsStopped;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;[...]&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;i&gt;SubscriptionName&lt;/i&gt; e &lt;i&gt;TopicName&lt;/i&gt; verranno utilizzati anche nel progetto che invia i messaggi (più avanti nel post).&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Ora, come definiamo il metodo OnStart()?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;In questo metodo creeremo la sottoscrizione e utilizzeremo la connection string indicata nei file di configurazione:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;public override bool OnStart()&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Set the maximum number of concurrent connections&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;ServicePointManager.DefaultConnectionLimit = 12;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Get configs from config file&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;string connectionString = CloudConfigurationManager.GetSetting(&amp;quot;Microsoft.ServiceBus.ConnectionString&amp;quot;);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Inserts a new topic if not exists&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;if (!namespaceManager.TopicExists(TopicName))&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160; namespaceManager.CreateTopic(TopicName);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Creates the subscription if not exists&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;if (!namespaceManager.SubscriptionExists(TopicName, SubscriptionName))&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160; namespaceManager.CreateSubscription(TopicName, SubscriptionName);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Creates the subscription client&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Client = SubscriptionClient.CreateFromConnectionString(connectionString, TopicName, SubscriptionName);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;IsStopped = false;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;return base.OnStart();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Il metodo &lt;i&gt;CreateSubscription&lt;/i&gt;, utilizzato con due parametri, crea una sottoscrizione senza filtro. Per applicare filtri, è possibile utilizzare la classe &lt;a href="http://msdn.microsoft.com/it-it/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx"&gt;SQLFilter&lt;/a&gt;. Ad esempio:&lt;/p&gt;  &lt;p&gt;// The MessageType property must be set on the message when sending&lt;/p&gt;  &lt;p&gt;namespaceManager.CreateSubscription(TopicName, SubscriptionName, new SqlFilter(&amp;quot;MessageType = 'NOTIFICATION'&amp;quot;));&lt;/p&gt;  &lt;p&gt;Il filtro deve essere impostato prima di inviare il messaggio, e chi lo gestisce deve poi applicarlo.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Come cambiare il metodo OnStop()?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Non c'è da cambiare nulla visto che disalloca già correttamente quello che utilizziamo.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Come leggere il messaggio ricevuto nel metodo Run()?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Utilizzeremo come detto la PeekLock (che è il metodo di lettura di default). In questo modo i messaggi letti non verranno &amp;quot;distrutti&amp;quot; e rimarranno nel topic. Il metodo tuttavia può essere cambiato utilizzando gli overload del metodo&lt;i&gt;CreateFromConnectionString() &lt;/i&gt;utilizzato nell'&lt;i&gt;OnStart()&lt;/i&gt;. Applicheremo qui di seguito un ciclo infinito che &amp;quot;attende&amp;quot; la ricezione del messaggio:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;while (!IsStopped)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;try&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160; {&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Receive the message&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;BrokeredMessage receivedMessage = Client.Receive();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; if (receivedMessage != null)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Process the message&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Do something..&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;receivedMessage.Complete();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;[...]&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Il resto del metodo è costituito dalla gestione delle eccezioni (anche, ad esempio, per le retry). Quello che manca è il &amp;quot;Do something..&amp;quot; e proprio qui andremo ad aggiungere la Trace del nostro messaggio:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;if (receivedMessage != null)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;{&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160; // Process the message (cast into our model)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;NotificationModel model = receivedMessage.GetBody&amp;lt;NotificationModel&amp;gt;();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;#160; // Here's the message&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Trace.WriteLine(&amp;quot;Message id&amp;quot;, model.NotificationId.ToString());&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Trace.WriteLine(&amp;quot;Message description&amp;quot;, model.NotificationDescription);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Trace.WriteLine(&amp;quot;Message date&amp;quot;, model.NotificationDate.ToShortDateString());&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;receivedMessage.Complete();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;La prima cosa che si nota è la get del messaggio. &lt;i&gt;GetBody&amp;lt;T&amp;gt;()&lt;/i&gt; consente di castare l'oggetto ricevuto nel tipo che abbiamo disegnato appositamente. Molto comodo. T = &lt;i&gt;NotificationModel&lt;/i&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;b&gt;Step 6 - Inviare il messaggio di tipo NotificationModel&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;Siamo quindi pronti per inviare il messaggio. Possiamo aggiungere un qualunque tipo di progetto (client), ma la cosa più semplice è creare una console application. In quest'ultima andremo a referenziare il nostro model e le due dll&lt;i&gt;Microsoft.WindowsAzure.Configuration.dll&lt;/i&gt; e &lt;i&gt;Microsoft.ServiceBus.dll&lt;/i&gt;. A questo punto, nell'app.config della console andremo ad aggiungere la connectionstring nella sezione apposita, come segue:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;lt;appSettings&amp;gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;lt;add key=&amp;quot;Microsoft.ServiceBus.ConnectionString&amp;quot; value=&amp;quot;Endpoint=sb://&amp;lt;mynamespace&amp;gt;.servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=&amp;lt;key&amp;gt;&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;lt;/appSettings&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;ed ecco il metodo &lt;i&gt;Main()&lt;/i&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2" face="Consolas"&gt;NotificationModel model = new NotificationModel();&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// prepare the message&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;model.NotificationDate = DateTime.Now;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;model.NotificationDescription = &amp;quot;This is my first message&amp;quot;;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;model.NotificationId = 1;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// get the connection string from config (app.config in this sample)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;string connectionString = CloudConfigurationManager.GetSetting(&amp;quot;Microsoft.ServiceBus.ConnectionString&amp;quot;);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;TopicClient Client = TopicClient.CreateFromConnectionString(connectionString, TopicName);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Create message, passing our model&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;BrokeredMessage message = new BrokeredMessage(model);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Send message to the topic&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Client.Send(message);&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Come dicevamo prima, per creare il valore su cui filtrare poi in sottoscrizione, basta aggiungere una proprietà al volo, appena prima di inviare:&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;// Message type for filtering on subscription (optional)&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;message.Properties[&amp;quot;MessageType&amp;quot;] = &amp;quot;NOTIFICATION&amp;quot;;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&lt;b&gt;Step 7 - Test&lt;/b&gt;&lt;/h3&gt;  &lt;p&gt;La solution appare come segue:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1830.clip_5F00_image007_5F00_45EC6487.jpg"&gt;&lt;img title="clip_image007" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image007" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1373.clip_5F00_image007_5F00_thumb_5F00_2E54B714.jpg" width="150" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- Abbiamo un progetto &lt;b&gt;MessagingTest &lt;/b&gt;di tipo cloud.&lt;/p&gt;  &lt;p&gt;- Un progetto &lt;b&gt;WorkerRole&lt;/b&gt; che alla fine è il manager del topic (receiver)&lt;/p&gt;  &lt;p&gt;- Un progetto &lt;b&gt;SendTest&lt;/b&gt; che è il sender (console application)&lt;/p&gt;  &lt;p&gt;- Una class library che fa da modello condiviso, chiamato &lt;b&gt;MessagingModel&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Facciamo partire il worker role. Verrà creato il topic e la sottoscrizione relativa. Il debugger rimarrà in attesa della ricezione dei messaggi. Parte quindi il ciclo infinito.&lt;/p&gt;  &lt;p&gt;Possiamo monitorare il worker utilizzando una UI chiamata &amp;quot;Windows Azure Compute and Storage emulator UI&amp;quot;. Noterete nel systray un'icona dalla quale è possibile aprire la user interface (tasto destro -&amp;gt; &amp;quot;Show Compute Emulator UI&amp;quot;):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6011.clip_5F00_image008_5F00_56F3231B.png"&gt;&lt;img title="clip_image008" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image008" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5873.clip_5F00_image008_5F00_thumb_5F00_0D63D51E.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quando il worker role parte la finestra cambierà in questo modo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8877.clip_5F00_image009_5F00_3D217D9D.png"&gt;&lt;img title="clip_image009" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image009" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7343.clip_5F00_image009_5F00_thumb_5F00_0334CB62.png" width="244" height="135" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Come possiamo vedere il worker rimane in attesa. Per inviare il messaggio, andiamo sulla bin del progetto console ed eseguiamo il &lt;i&gt;SendTest.exe&lt;/i&gt;. In base a come abbiamo configurato le nostre strutture, invieremo al &amp;quot;&lt;i&gt;MyFirstTopic&lt;/i&gt;&amp;quot;, con una &amp;quot;&lt;i&gt;MyFirstSubscription&lt;/i&gt;&amp;quot;, un messaggio di tipo &lt;i&gt;NotificationModel&lt;/i&gt;. Il messaggio, a sua volta, avrà potenzialmente (se specificato) una proprietà &amp;quot;&lt;i&gt;MessageType&lt;/i&gt;&amp;quot; come valore di filtro. Una volta che il messaggio è arrivato, vedremo quanto segue sul monitor:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4666.clip_5F00_image010_5F00_4E96FFD7.png"&gt;&lt;img title="clip_image010" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image010" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6253.clip_5F00_image010_5F00_thumb_5F00_5956E7DD.png" width="244" height="135" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Funziona! Vedo la traccia! Questo è il monitor locale, ma sul Windows Azure Portal abbiamo il monitor del cloud &amp;quot;reale&amp;quot;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6102.clip_5F00_image011_5F00_74230DE9.png"&gt;&lt;img title="clip_image011" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image011" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1323.clip_5F00_image011_5F00_thumb_5F00_3146C96F.png" width="244" height="112" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;se siete interessati a questo approccio nelle vostre applicazioni vi consiglio i seguenti link:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.windowsazure.com/it-it/home/features/messaging/"&gt;Windows Azure Service Bus&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.windowsazure.com/it-it/develop/net/how-to-guides/service-bus-queues/"&gt;How to use Service Bus Queues&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.windowsazure.com/it-it/develop/net/how-to-guides/service-bus-topics/"&gt;How to use Service Bus Topics&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10425428" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/italy/archive/tags/Windows+Azure/">Windows Azure</category><category domain="http://blogs.msdn.com/b/italy/archive/tags/Guest+post/">Guest post</category></item><item><title>Guest Post: Conflitti durante lo sviluppo concorrente</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/27/guest-post-conflitti-durante-lo-sviluppo-concorrente.aspx</link><pubDate>Mon, 27 May 2013 08:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10421129</guid><dc:creator>Lorenzo Barbieri [MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10421129</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/27/guest-post-conflitti-durante-lo-sviluppo-concorrente.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Questo post è stato scritto da &lt;a href="http://twitter.com/alkampfer" target="_blank"&gt;Gian Maria Ricci&lt;/a&gt;, MVP Visual Studio ALM&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;Gestione conflitti in sistemi centralizzati&lt;/h4&gt;  &lt;p&gt;I conflitti possono accadere in entrambe le tipologie di VCS (Version Control Systems), sia in quello centralizzato sia in quello distribuito, è comunque interessante capire a fondo come i vari sistemi riescano ad identificarli per permetterne la risoluzione.&lt;/p&gt;  &lt;p&gt;Nel source control standard di Team Foundation Server i conflitti vengono rilevati sia durante la fase di Check-In, sia durante la fase di Get-Latest. Durante un Get-Latest infatti, per ogni file modificato nel server e che viene quindi scaricato per aggiornare la versione locale, Visual Studio verifica se il file ha modifiche pendenti ed in caso affermativo si ha un conflitto, poiché il file è stato modificato da due distinte parti. &lt;/p&gt;  &lt;p&gt;In caso di conflitto Visual Studio cerca di capire se è possibile effettuare un merge automatico delle modifiche, senza richiedere dunque l’intervento manuale dell’utente. Questo accade ad esempio se le modifiche riguardano parti differenti di un file. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8156.clip_5F00_image002_5F00_7849CBAD.jpg"&gt;&lt;img title="clip_image002" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5444.clip_5F00_image002_5F00_thumb_5F00_2890A064.jpg" width="244" height="82" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nel caso non sia possibile procedere ad un merge automatico, lo sviluppatore viene notificato e si procede ad effettuare un merge manuale utilizzando Visual Studio o altri strumenti equivalenti. Come nota si consiglia comunque di controllare sempre dopo il Get-Latest se sono state scaricate nuove modifiche ed in caso affermativo, anche se non vi sono conflitti, è sempre buona norma rieseguire gli Unit Test per vedere se le modifiche scaricate sono compatibili con le modifiche pendenti locali.&lt;/p&gt;  &lt;p&gt;Durante un check-in la situazione è invece leggermente differente; si supponga infatti che Marco abbia fatto un Get-Latest recuperando il changeset con id 100 ed inizi a lavorare su di un file. Nel frattempo Giorgio modifica lo stesso file effettuando Check-In e creando quindi un changeset con id superiore, supponiamo il 101. Per correttezza Marco dovrebbe sempre effettuare un Get-Latest e risolvere eventuali conflitti prima di tentare un check-in; supponiamo invece che utilizzi la procedura meno corretta e tenti di effettuare direttamente il check-in senza curarsi di eseguire un Get-Latest. &lt;/p&gt;  &lt;p&gt;In questo caso durante le operazioni di check-in, per ogni file viene associato il numero di versione che tale file aveva nel workspace locale quando sono iniziate le modifiche, nel nostro esempio 100. Il server verifica quindi la versione attuale del file (in questo caso la 101 perché è stato modificato da Giorgio), e se le due versioni non corrispondono il file è stato modificato da entrambi. Anche in questo caso è possibile che le modifiche possano essere risolte da un automerge, ma in caso non siano compatibili, il check-in viene bloccato.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0020.clip_5F00_image004_5F00_079D2DBD.jpg"&gt;&lt;img title="clip_image004" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8228.clip_5F00_image004_5F00_thumb_5F00_3445E796.jpg" width="244" height="113" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Questo blocco è fondamentale, perché se non ci fosse Marco avrebbe erroneamente sovrascritto ed annullato le modifiche di Giorgio. Quando il check-in viene bloccato, si rende necessario procedere ad un Get-Latest e risolvere i conflitti localmente prima di tentare nuovamente un check-in.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4212.clip_5F00_image006_5F00_6C182BB9.jpg"&gt;&lt;img title="clip_image006" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image006" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0435.clip_5F00_image006_5F00_thumb_5F00_5ED1A2A6.jpg" width="244" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Gestioni conflitti in git&lt;/h4&gt;  &lt;p&gt;In un sistema distribuito la gestione dei conflitti è molto simile, ma complicata dal concetto di commit locale. In questo scenario di esempio si hanno due utenti: Gian Maria Ricci ed alkampferOutook, i quali possono modificare entrambi lo stesso file e fare commit in locale contemporaneamente. Questo accade perché il commit è locale, ogni sviluppatore ha una linea di codice composta dai suoi commit e quindi nessun conflitto si genera se due sviluppatori modificano e fanno commit di uno stesso file. Si supponga che entrambi gli sviluppatori abbiano fatto un clone di un repository, costituito per ora da un singolo commit con id 202396b ed abbiano fatto alcune modifiche creando ognuno due commit nel proprio repository locale.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;NOTA: Nella descrizione seguente, ogni qualvolta si parla di &lt;b&gt;origin&lt;/b&gt; si intende implicitamente il server remoto predefinito collegato al repository locale, che di base è il server da cui si è effettuato il clone. Data la sua natura distribuita, è possibile che il proprio repository locale Git si sincronizzi con più server (detti remote) e quindi la dicitura server può risultare ambigua, non esistendo di fatto il concetto di un unico server centralizzato. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Sebbene non si sia ancora parlato di branch, per ora si consideri semplicemente che quando si effettua il primo commit in un repository Git, viene automaticamente creata una prima branch chiamata master che costituisce l’unica branch attiva. &lt;/p&gt;  &lt;p&gt;Quando Gian Maria Ricci tenta di effettuare il &lt;b&gt;push&lt;/b&gt; verso il server origin, git non fa altro che verificare la posizione della branch corrispondente nel sistema destinazione e se non ci sono stati cambiamenti dall’ultima volta che è stato fatto &lt;b&gt;pull&lt;/b&gt; esegue un fast-forward, ovvero copia semplicemente i commit nel sistema destinazione. &lt;/p&gt;  &lt;p&gt;Quello che accade in dettaglio è: quando uno sviluppatore effettua un pull (o il clone iniziale), tutti i commit del sistema remoto vengono scaricati nel repository locale, cosi che i due repository siano perfettamente allineati ed identici (nei sistemi distribuiti infatti ogni sviluppatore ha una copia completa del repository). Quando uno sviluppatore effettua commit locali, questi vengono aggiunti sequenzialmente alla branch attiva ed ognuno ha un id (costituito da un hash SHA1), come si può vedere con un git logf. (il comando logf non è altro che un alias creato con l’istruzione git config --global alias.logf &amp;quot;log --graph --oneline --all --decorate&amp;quot;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7318.clip_5F00_image008_5F00_2F9FB70F.jpg"&gt;&lt;img title="clip_image008" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image008" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7268.clip_5F00_image008_5F00_thumb_5F00_4E09F7F8.jpg" width="244" height="39" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il dato interessante è dato dalla colorazione, che identifica in maniera univoca la situazione del repository. In primo luogo, in verde, è mostrata la branch attiva locale; la master è attualmente pari alla HEAD (è infatti l’unica branch ed è quella attiva), ed è associata all’ultimo commit con hash &lt;i&gt;ca9fd1e&lt;/i&gt;. La master remota, ovvero quella del TF Service, è invece mostrata in rosso ed è chiamata &lt;b&gt;origin/master&lt;/b&gt; ad indicare appunto che è la branch master del remote chiamato origin. Avendo effettuato due commit, la branch master locale è due commit più avanti della master remota, che invece è ferma al &lt;i&gt;202396b&lt;/i&gt;. L’operazione di &lt;b&gt;push&lt;/b&gt; non fa altro che tentare di inviare i due commit locali al server e se nel frattempo nessuno ha effettuato operazioni di push, questi commit locali vengono semplicemente copiati nel server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3482.clip_5F00_image010_5F00_7F293298.jpg"&gt;&lt;img title="clip_image010" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image010" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1460.clip_5F00_image010_5F00_thumb_5F00_7DE499B9.jpg" width="244" height="114" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Effettuando di nuovo un log da riga di comando si può notare come ora la origin/master sia allineata alla master locale, ed i due commit sono stati correttamente copiati nel server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1616.clip_5F00_image012_5F00_5CF12712.jpg"&gt;&lt;img title="clip_image012" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image012" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6518.clip_5F00_image012_5F00_thumb_5F00_4963C771.jpg" width="244" height="31" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Supponiamo ora che l’altro sviluppatore (AlkampferOutlook) abbia anche lui effettuato due commit e tenti di effettuare l’operazione di push. In questo caso i due commit sono sempre successivi al commit &lt;i&gt;202396b&lt;/i&gt;, ma nel frattempo la branch master del server è stata aggiornata ed ora punta al commit &lt;i&gt;ca9fd1e&lt;/i&gt;. In questo caso l’operazione viene fermata, dato che non è più possibile effettuare il fast-forward; AlkampferOutlook deve quindi effettuare il merge con le modifiche che nel frattempo sono state inviate da Gian Maria Ricci. L’interfaccia suggerisce quindi di effettuare un pull (operazione analoga al get-latest) ed effettuare la merge in locale.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3733.clip_5F00_image014_5F00_7A830211.jpg"&gt;&lt;img title="clip_image014" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image014" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5023.clip_5F00_image014_5F00_thumb_5F00_54ACDBAE.jpg" width="244" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tentando il push da command line il messaggio è molto più esplicito&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4214.clip_5F00_image016_5F00_778D9D5E.jpg"&gt;&lt;img title="clip_image016" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image016" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3731.clip_5F00_image016_5F00_thumb_5F00_55C1C4CD.jpg" width="244" height="54" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Fetch, pull e risoluzione di conflitti in locale&lt;/h4&gt;  &lt;p&gt;La soluzione al conflitto è fare un pull, ma prima di procedere in questa direzione è preferibile entrare più a fondo nel funzionamento di git per comprendere più in dettaglio cosa accade durante questa operazione.&lt;/p&gt;  &lt;p&gt;Una volta che il suo tentativo di Push è stato rigettato, AlkampferOutlook può effettuare un log a riga di comando per capire lo stato del suo repository.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5340.clip_5F00_image018_5F00_34CE5226.jpg"&gt;&lt;img title="clip_image018" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image018" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2538.clip_5F00_image018_5F00_thumb_5F00_1A8DE902.jpg" width="244" height="28" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La situazione è esattamente omologa a quella vista da Gian Maria Ricci precedentemente, ovvero la master locale è due commit più avanti della branch remota, ma questa informazione è purtroppo oramai obsoleta, perché nel frattempo Gian Maria Ricci ha fatto push sulla master remota. Per aggiornare la situazione del repository locale e scaricare i commit che nel frattempo sono stati aggiunti al server è necessario usare il comando &lt;i&gt;fetch&lt;/i&gt; (git fetch)&lt;/p&gt;  &lt;p&gt;Questo comando contatta il server remoto, scaricando le eventuali modifiche effettuate dall’ultimo aggiornamento. Visual Studio ha il vantaggio di mostrare una comoda visualizzazione grafica di quello che è cambiato dopo che viene effettuato il fetch&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2577.clip_5F00_image020_5F00_2787C913.jpg"&gt;&lt;img title="clip_image020" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image020" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3021.clip_5F00_image020_5F00_thumb_5F00_5EEDDA41.jpg" width="244" height="200" /&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Dall’immagine precedente è immediatamente chiaro che Gian Maria Ricci ha fatto due commit rispetto il nostro ultimo aggiornamento ed è necessario dunque procedere ad un merge. &lt;/p&gt;  &lt;p&gt;La stessa visualizzazione si può avere in command line:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5123.clip_5F00_image022_5F00_16C01E65.jpg"&gt;&lt;img title="clip_image022" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image022" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0245.clip_5F00_image022_5F00_thumb_5F00_6E413C50.jpg" width="244" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In questo caso è leggermente più difficile comprendere cosa sia successo, ma la rappresentazione grafica premette comunque di capire che la branch master locale è partita dal commit &lt;i&gt;202396b&lt;/i&gt;, ed è evoluta con due commit (&lt;i&gt;806c743&lt;/i&gt; e &lt;i&gt;d9f7cc7&lt;/i&gt;), mentre la origin/master, partita anche essa dal commit &lt;i&gt;202396b&lt;/i&gt; è ora evoluta con altri due commit (&lt;i&gt;8374733&lt;/i&gt; e &lt;i&gt;ca9fd1e&lt;/i&gt;) che sono stati effettuati da Gian Maria Ricci.&lt;/p&gt;  &lt;p&gt;Un tool utile per familiarizzare con questi concetti ed avere una chiara visualizzazione è stato scritto da Phil Haack e permette di avere una visualizzazione grafica del proprio repository, in maniera analoga alle varie immagini che si vedono sui tutorial o libri su Git. Il tool si chiama SeeGit ed è possibile trovarlo qui (&lt;a href="http://haacked.github.io/SeeGit/"&gt;http://haacked.github.io/SeeGit/&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6557.clip_5F00_image024_5F00_623F4C1C.jpg"&gt;&lt;img title="clip_image024" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image024" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7080.clip_5F00_image024_5F00_thumb_5F00_20C499C3.jpg" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se invece si vuole una visualizzazione grafica veramente completa è possibile utilizzare un altro tool completamente gratuito chiamato SourceTree, il quale permette di gestire un repository Git o Mercurial fornendo una interfaccia molto intuitiva e che permette facilmente di visualizzare le differenze tra i file.&lt;/p&gt;  &lt;p&gt;A discapito del tool utilizzato, una volta effettuato il fetch, è necessario procedere al merge tra le proprie modifiche e quelle appena scaricate con il comando&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;git merge origin/master&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Questo comando non fa altro che effettuare una merge tra la branch locale correntemente attiva (la master in questo caso) e la origin/master. Se non vi sono conflitti, ovvero le modifiche nei vari commit non riguardano le stesse porzioni di file, il merge viene eseguito in maniera automatica e lo sviluppatore dovrà quindi procedere alla verifica del merge stesso, in maniera analoga a quello che si fa dopo un merge su un VCS centralizzato.&lt;/p&gt;  &lt;p&gt;Le operazioni di fetch e merge sono comuni per allineare la propria branch con quella di un server di upstream, per cui in git è presente il comando &lt;b&gt;pull&lt;/b&gt; &lt;i&gt;che effettua entrambi i comandi in uno&lt;/i&gt;. In Visual Studio infatti abbiamo la possibilità di effettuare il fetch o direttamente il pull. Sia che venga fatto a riga di comando o da Visual Studio o con qualsiasi altro tool questa è la situazione che si ha dopo un fetch+merge (o pull)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5355.clip_5F00_image026_5F00_5896DDE6.jpg"&gt;&lt;img title="clip_image026" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image026" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3250.clip_5F00_image026_5F00_thumb_5F00_45097E45.jpg" width="244" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La situazione è ancora più chiara utilizzando l’utility di Phil Haack.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3107.clip_5F00_image028_5F00_67EA3FF5.jpg"&gt;&lt;img title="clip_image028" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image028" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6254.clip_5F00_image028_5F00_thumb_5F00_1492F9CF.jpg" width="244" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dato che ogni sviluppatore possiede un repository locale, è molto comune la situazione in cui, partendo da un singolo commit, si abbia la divergenza con più linee di codice, una sviluppata in locale e l’altra in uno dei remote con cui si sta lavorando. In questo caso quindi il commit &lt;i&gt;140f00a8&lt;/i&gt; ha due commit padri, perché costituisce la merge dei due distinti rami di codice che si sono generati dal primo commit &lt;i&gt;202396b4&lt;/i&gt;. A tutti gli effetti quindi quando avvengono conflitti quello che si fa è fare un merge della branch locale con la corrispondente branch remota che è stata portata in locale con il comando &lt;i&gt;fetch.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Una volta che la correttezza del merge è stata verificata (Unit Test e/o verifica manuale), è possibile effettuare il push. Se nel frattempo nessuno ha inviato altri commit, i tre commit (i due effettuati in locale ed il risultato della merge) verranno inviati al server, altrimenti sarà necessario procedere nuovamente ad un nuovo pull.&lt;/p&gt;  &lt;h4&gt;Risoluzione di conflitti all’interno di Visual Studio&lt;/h4&gt;  &lt;p&gt;Naturalmente è possibile che entrambi gli sviluppatori abbiano modificato lo stesso file, in questo caso durante il merge git notificherà l’utente della presenza di uno o più conflitti.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5633.clip_5F00_image030_5F00_7A5290AA.jpg"&gt;&lt;img title="clip_image030" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image030" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8780.clip_5F00_image030_5F00_thumb_5F00_23E65BDE.jpg" width="244" height="145" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La comodità di uno strumento grafico come Visual Studio è capire con facilità tutti i file che hanno attualmente generato conflitti ed avere quindi un quadro preciso della situazione. È comunque possibile utilizzare la command line anche per le operazioni di merge, dato che gli eventuali conflitti vengono comunque risolti con un tool visuale, lanciato in automatico dalla command line stessa. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7673.clip_5F00_image032_5F00_37934572.jpg"&gt;&lt;img title="clip_image032" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image032" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8686.clip_5F00_image032_5F00_thumb_5F00_281033A3.jpg" width="244" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In questo caso il conflitto è su un singolo file, è possibile premere sul link Compare Files per lanciare il compare tools di Visual Studio e capire cosa è cambiato.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4426.clip_5F00_image034_5F00_06B08E07.jpg"&gt;&lt;img title="clip_image034" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image034" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7080.clip_5F00_image034_5F00_thumb_5F00_19F144A6.jpg" width="244" height="66" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Di base però si preme il bottone Merge e si gestiscono i conflitti direttamente da Visual Studio&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4300.clip_5F00_image036_5F00_4B107F46.jpg"&gt;&lt;img title="clip_image036" style="margin: 0px; display: inline; background-image: none;" border="0" alt="clip_image036" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3250.clip_5F00_image036_5F00_thumb_5F00_5731F96D.jpg" width="244" height="94" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se avete installato precedentemente msysgit o i tool di GitHub è possibile che premendo il bottone Merge vi si apra il KDiff3 o qualche altro strumento di risoluzione conflitti. Questo accade perché git memorizza nelle configurazioni gli strumenti da usare per il compare e la risoluzione di conflitti, in modo che possano essere lanciati durante il merge da command line. Dato che il plugin per git integrato in Visual Studio preserva le configurazioni, se nel config è indicato di usare kdiff3, Visual Studio onora la configurazione e non usa il suo strumento integrato. Per risolvere questo problema ed usare Visual Studio è possibile editare direttamente il file di configurazione di git locale o globale inserendo questa configurazione&lt;/p&gt;  &lt;p&gt;[diff]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tool = vsdiffmerge&lt;/p&gt;  &lt;p&gt;[difftool]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; prompt = true&lt;/p&gt;  &lt;p&gt;[difftool &amp;quot;vsdiffmerge&amp;quot;]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cmd = \&amp;quot;C:\\Program Files (x86)&lt;a href="file:///\\Microsoft"&gt;\\Microsoft&lt;/a&gt; Visual Studio 11.0\\Common7\\IDE\\vsdiffmerge.exe\&amp;quot; \&amp;quot;$LOCAL\&amp;quot; \&amp;quot;$REMOTE\&amp;quot; //t&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; keepbackup = false&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustexistcode = true&lt;/p&gt;  &lt;p&gt;[merge]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tool = vsdiffmerge&lt;/p&gt;  &lt;p&gt;[mergetool]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; prompt = true&lt;/p&gt;  &lt;p&gt;[mergetool &amp;quot;vsdiffmerge&amp;quot;]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cmd = \&amp;quot;C:\\Program Files (x86)&lt;a href="file:///\\Microsoft"&gt;\\Microsoft&lt;/a&gt; Visual Studio 11.0\\Common7\\IDE\\vsdiffmerge.exe\&amp;quot; \&amp;quot;$REMOTE\&amp;quot; \&amp;quot;$LOCAL\&amp;quot; \&amp;quot;$BASE\&amp;quot; \&amp;quot;$MERGED\&amp;quot; //m&lt;/p&gt;  &lt;p&gt;keepbackup = false&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trustexistcode = true&lt;/p&gt;  &lt;p&gt;Il file di configurazione locale si chiama &lt;i&gt;config&lt;/i&gt; ed è nella cartella .git del repository locale, mentre il file di configurazione globale per l’utente si chiama .gitconfig ed è nella cartella di profilo dell’utente c:\users\nomeutente. Entrambi sono file di testo che possono essere editati senza problemi. Localizzate le eventuali sezioni già presenti (quelle tra parentesi quadre) e sostituitele con quelle mostrate sopra&lt;/p&gt;  &lt;p&gt;Se non è stato configurato nessuno strumento, Visual Studio di default utilizza i suoi strumenti integrati.&lt;/p&gt;  &lt;p&gt;Indipendentemente dallo strumento utilizzato per la risoluzione dei conflitti, una volta che tutti sono stati risolti, i file risultano modificati e debbono quindi essere committati nel repository locale prima di poter effettuare il push verso il server remoto. Nella figura sottostante è infatti rappresentata la situazione in cui ho due commit da inviare al remote, il primo è il commit che ha generato conflitto, il secondo è quello che risolve il conflitto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3107.clip_5F00_image038_5F00_7D27A9C3.jpg"&gt;&lt;img title="clip_image038" style="display: inline; background-image: none;" border="0" alt="clip_image038" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2047.clip_5F00_image038_5F00_thumb_5F00_20086B74.jpg" width="244" height="106" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421129" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/italy/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/italy/archive/tags/ALM/">ALM</category></item><item><title>Guest post: Utilizzare gli SMS per l’autenticazione nelle app Windows Store</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/24/guest-post-utilizzare-gli-sms-per-l-autenticazione-nelle-app-windows-store.aspx</link><pubDate>Fri, 24 May 2013 09:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10421125</guid><dc:creator>Lorenzo Barbieri [MSFT]</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10421125</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/24/guest-post-utilizzare-gli-sms-per-l-autenticazione-nelle-app-windows-store.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Questo post &amp;egrave; stato scritto da Giancarlo Lelli (&lt;/em&gt;&lt;a href="https://twitter.com/itsonlyGianca" target="_blank"&gt;&lt;em&gt;@itsonlyGianca&lt;/em&gt;&lt;/a&gt;&lt;em&gt;), Microsoft Student Partner di Cagliari.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In questo articolo vedremo come implementare un&amp;rsquo;autenticazione SMS nelle nostre app Windows Store, ovvero come Windows 8 permette questo tipo di procedura, quali sono le classi che permettono di interfacciarsi ad un dispositivo mobile broadband e soprattutto i prerequisiti hardware e a livello di ambiente di sviluppo necessari per usufruire di tutte le potenzialit&amp;agrave; di questo particolare metodo di autenticazione.&lt;/p&gt;
&lt;h4&gt;Prefazione&lt;/h4&gt;
&lt;p&gt;Prima di addentrarci nell&amp;rsquo;argomento preciso che le procedure riportate in questo articolo non si possono applicare a coloro cha hanno intenzione di sviluppare app per operatori di telefonia mobile, ma solamente a coloro che vogliono utilizzare all&amp;rsquo;interno della loro field application (per cui mi riferisco a coloro che svilupperanno app del tipo LOB) questo tipo di layer di sicurezza. Gli esempi di codice forniti in questi articolo saranno in C#&lt;/p&gt;
&lt;h4&gt;Background&lt;/h4&gt;
&lt;p&gt;Il supporto alla tecnologia mobile broadband non &amp;egrave; qualcosa di nuovo al dir la verit&amp;agrave;, infatti era gi&amp;agrave; presente ai tempi di Windows 7, tuttavia la maniera in cui poteva essere utilizzata risultava piuttosto problematica, dovuta alla necessit&amp;agrave; di installare software e driver di terze parti per rendere operativo il nostro mobile broadband device. In Windows 8 queste problematiche sono state risolte, introducendo delle funzionalit&amp;agrave; che ad oggi permettono all&amp;rsquo; utente di avere un esperienza utente sempre connessa, permettendo di considerare le connessioni a consumo come qualcosa (in certi casi) analogo al Wi-Fi. A questo proposito &amp;egrave; stato fatto un lavoro di re-ingegnerizzazione dello stack di wireless networking che ha portato una serie di interessanti novit&amp;agrave;, due delle principali sono:&lt;/p&gt;
&lt;p&gt;Introduzione del Mobile Broadband Interface Model (MBIM) ovvero sia una nuova specifica hardware che i produttori potranno adottare nei loro dispositivi garantendo cos&amp;igrave; un hardware experience di gran lunga superiore a quella a cui eravamo abituati. Infatti all&amp;rsquo; interno di Windows 8 la specifica MBIM viene fornita come qualcosa out of the box, ovvero gi&amp;agrave; nativamente supportata, infatti il class driver che &amp;egrave; destinato a supportare questo particolare tipo di device &amp;egrave; gi&amp;agrave; nativamente disponibile all&amp;rsquo; interno del SO, quello che dobbiamo fare noi &amp;egrave; semplicemente connettere il dispositivo al nostro pc/tablet, senza nemmeno preoccuparci di eventuali aggiornamenti perch&amp;eacute; &amp;egrave; tutto gestito da Windows Update.&lt;/p&gt;
&lt;p&gt;Introduzione di due nuovi namespace strettamente collegati:&lt;/p&gt;
&lt;p&gt;&amp;middot; &lt;strong&gt;Windows.Device.Sms&lt;/strong&gt;: che espone classi e metodi gestiti e fruibili da tutti i linguaggi supportati da WinRT per interfacciarsi ai dispositivi mobile broadband connessi al nostro pc/tablet.&lt;/p&gt;
&lt;p&gt;&amp;middot; &lt;strong&gt;Windows.Networking.Connectivity&lt;/strong&gt;: permette di ottenere informazioni sulla connettivit&amp;agrave;, l&amp;rsquo;uso e il piano dati per la connessione a consumo attiva. I dati ottenuti tramite questi metodi possono essere usati per evitare il cosiddetto bill-shock, ovvero costi superiori al normale dovuti a sfori sul piano dati.&lt;/p&gt;
&lt;p&gt;In questo articolo ci concentreremo soprattutto sul primo del due namespace illustrati sopra.&lt;/p&gt;
&lt;h4&gt;Windows.Device.Sms &amp;ndash; Features&lt;/h4&gt;
&lt;p&gt;Le funzionalit&amp;agrave; messe a disposizione a noi developer da questo namespace sono innumerevoli, le principali, e quelle che consumeremo noi negli esempi di questo articolo sono elencato di seguito:&lt;/p&gt;
&lt;p&gt;&amp;middot; Invio e ricezione di SMS in formato di testo&lt;/p&gt;
&lt;p&gt;&amp;middot; Interfacciamento con il dispositivo mobile broadband&lt;/p&gt;
&lt;p&gt;&amp;middot; Letture, scrittura e cancellazione di sms dal message store (memoria della sia card)&lt;/p&gt;
&lt;p&gt;&amp;middot; Enumerazioni di tutti i dispositivi mobile broadband connessi&lt;/p&gt;
&lt;p&gt;&amp;middot; Nuovo event trigger per background task&lt;/p&gt;
&lt;p&gt;Ovviamente molti dei metodi di questo spazio dei nomi rispettano la filosofia asincrona di Windows 8 perci&amp;ograve; supportano pienamente le due nuove keyword async/await, tuttavia alcune operazioni sono ancora collegate al vecchio concetto di callback associati ad un evento, a questo proposito mi riferisco agli eventi che riguardano la ricezione di un nuovo SMS e al cambiamento di stato del nostro mobile broadband device.&lt;/p&gt;
&lt;p&gt;Per facilitare l&amp;rsquo;integrazione di un app mobile broadband con il sistema operativo &amp;egrave; stato introdotto anche un nuovo event trigger che potr&amp;agrave; essere usato nella definizione di nuovi background task per permettere ad un app la cui funzione &amp;egrave; strettamente di messaggistica di potersi svegliare qualora venga ricevuto un sms, sganciandosi cos&amp;igrave; dal vincolo dei callback che ovviamente vengono eseguiti solo quando l&amp;rsquo;app &amp;egrave; in esecuzione.&lt;/p&gt;
&lt;h4&gt;Operazioni preliminari&lt;/h4&gt;
&lt;p&gt;Prima di buttarci nei meandri di Visual Studio ci sono alcuni step preliminari da eseguire, che permettono alla nostra app di avere i privilegi di accesso al MB device, ovvero, definire il metadata package per il nostro dispositivo MB e impostare le capabilities nella nostra solution di VS2012.&lt;/p&gt;
&lt;p&gt;I requisiti software sono i seguenti:&lt;/p&gt;
&lt;p&gt;&amp;middot; PC con Windows 8 (preferibilmente Pro) installato&lt;/p&gt;
&lt;p&gt;&amp;middot; Visual Studio 2012&lt;/p&gt;
&lt;p&gt;&amp;middot; Windows Driver Kit installato&lt;/p&gt;
&lt;p&gt;I requisiti hardware invece:&lt;/p&gt;
&lt;p&gt;&amp;middot; Dispositivo mobile broadband che sfrutta lo standard MBIM collegato al pc/tablet. [&lt;a href="https://sysdev.microsoft.com/en-us/hardware/lpl/"&gt;List&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Completati questi step strettamente preparatori, la prima cosa che dobbiamo fare (se non lo abbiamo gi&amp;agrave; fatto) &amp;egrave; collegare il nostro MB device al nostro pc/tablet. Non appena il device verr&amp;agrave; collegato, il sistema operativo riconoscer&amp;agrave; che si tratta di un dispositivo che sfrutta il MBIM e quindi attraverso il Device Metadata Retrieval Client (&lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff541449(v=vs.85).aspx"&gt;DMRC&lt;/a&gt;) controller&amp;agrave; in primis che all&amp;rsquo;interno del nostro computer non ci sia gi&amp;agrave; un metadata package relativo a quella periferica (&lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff541426(v=vs.85).aspx"&gt;device metadata cache&lt;/a&gt; &amp;ndash; &lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff541456(v=vs.85).aspx"&gt;device metadata store&lt;/a&gt;), qualora non esistesse o ha bisogno di essere aggiornato il DMRC far&amp;agrave; una query al Windows Metadata and Internet Services website (&lt;a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff553997(v=vs.85).aspx"&gt;WMIS&lt;/a&gt;) per determinare l&amp;rsquo;esistenza di un package per tale dispositivo, qualora esistesse il DMRC lo scarica lo scompatta e lo memorizza all&amp;rsquo; interno della cartella che contiene la cache dei metadati. (&lt;em&gt;%PROGRAMDATA%\Microsoft\Windows\DeviceMetadataStore\&lt;/em&gt;). Arrivati a questo punto possiamo aprire VS2012, subito noteremo che nella barra dei men&amp;ugrave; &amp;egrave; apparsa una nuova voce ovvero &amp;ldquo;Drivers&amp;rdquo;. Navighiamo come mostra la figura uno sino ad arrivare al men&amp;ugrave; relativo ai MB device metadata.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4338.clip_5F00_image002_5F00_727D7FD2.jpg"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5344.clip_5F00_image002_5F00_thumb_5F00_69AD7786.jpg" alt="clip_image002" width="244" height="75" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una volta aperto quel men&amp;ugrave; ci ritroveremo davanti il wizard per l&amp;rsquo;authoring di service metadata, noi per comodit&amp;agrave; sceglieremo di modificarne uno gi&amp;agrave; esistente (quello scaricato dal DMRC) e una volta che verr&amp;agrave; aperto muoviamoci nella scheda &amp;ldquo;Applications&amp;rdquo; e andiamo a riempire i campi raggruppati nelle sezioni Metro Style device app e privileged application. Una volta fatto andiamo nella scheda finish e salviamo il newly edited package sostituendolo a quello gi&amp;agrave; esistente. Con questa procedura abbiamo aggiunto la nostra app alla whitelist di tale dispositivo. Una feature collegata ai metadata package &amp;egrave; la possibilit&amp;agrave; di specificare degli URL di app gi&amp;agrave; nello store di modo che una, volta fatto il deploy del pacchetto, quando verr&amp;agrave; connesso un dispositivo qualsiasi che abbia dei metadati gi&amp;agrave; definiti, Windows 8 scaricher&amp;agrave; automaticamente l&amp;rsquo;app indicata dallo store.&lt;/p&gt;
&lt;p&gt;Il prossimo step sta nel definire le capabilities nella nostra solution di VS2012, questo step &amp;egrave; abbastanza banale ma leggermente diverso da quello a cui siamo abituati poich&amp;eacute; il file *.appxmanifest non permette l&amp;rsquo;aggiunta di tale feature tramite interfaccia grafica. Per cui dovremmo aprire tale file in modalit&amp;agrave; di testo e inserire il seguente codice:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3618.clip_5F00_image004_5F00_48BA04DF.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5126.clip_5F00_image004_5F00_thumb_5F00_203B22CB.png" alt="clip_image004" width="244" height="78" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adesso siamo pronti a sviluppare la nostra app.&lt;/p&gt;
&lt;h4&gt;Code snippet per app di Windows Store C#&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Presupponendo l&amp;rsquo;aggiunta di questi namespace e la dichiarazione di queste tre variabili:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3678.clip_5F00_image006_5F00_664BDFDE.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image006" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0066.clip_5F00_image006_5F00_thumb_5F00_4C0B76BA.png" alt="clip_image006" width="244" height="36" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inizializziamo il MB device&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5773.clip_5F00_image008_5F00_590556CB.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image008" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1016.clip_5F00_image008_5F00_thumb_5F00_1B94F244.png" alt="clip_image008" width="244" height="130" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il codice sopra riportato &amp;egrave; abbastanza autoesplicativo, ovvero per prima cosa creiamo un grande blocco try-catch, poi inizializziamo la variabile mai device con l&amp;rsquo;istanza del dispositivo Mb di default, se non vengono sollevate eccezioni utilizziamo una messagebox per far visualizzare alcune info sulla periferica collegata, altrimenti visualizziamo il tipo di errore. Le info base che visualizzeremo sono: il numero di telefono della sim inserita, la classe cellulare della scheda lo stato del device e la capienza della memoria della sim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enumerazione di tutti i dispositivi mobile broadband&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1447.clip_5F00_image010_5F00_1A505965.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image010" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2451.clip_5F00_image010_5F00_thumb_5F00_1FBECA09.png" alt="clip_image010" width="244" height="147" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tralasciando la parte identica allo snippet precedente notiamo come il metodo &lt;strong&gt;.GetDeviceSelector()&lt;/strong&gt; permetta di utilizzare una stringa AQS per identificare all&amp;rsquo; interno del nostro pc/tablet tutti i dispositivi mobile broadband, dopodich&amp;eacute; con un semplice ciclo for visualizziamo tutte le info base per ogni device, identificando il singolo device attraverso il suo Id univoco utilizzato il inizializzare ad ogni ciclo la variabile di tipo &lt;strong&gt;SmsDevice&lt;/strong&gt; a meno di eventuali eccezioni.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Invio SMS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7673.clip_5F00_image012_5F00_1350A6E0.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image012" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8182.clip_5F00_image012_5F00_thumb_5F00_446FE180.png" alt="clip_image012" width="244" height="53" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lettura messaggi dalla memoria della sim&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6076.clip_5F00_image014_5F00_71189B59.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image014" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0525.clip_5F00_image014_5F00_thumb_5F00_21CBA305.png" alt="clip_image014" width="244" height="64" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In questo snippet vediamo come &amp;egrave; possibile legge gli SMS dallo store della sim, vale la pena evidenziare due cose, ovvero, l&amp;rsquo;enumerazione &lt;strong&gt;SMSMessageFilter&lt;/strong&gt; permette di identificare la tipologia di msg da leggere (inviati, ricevuti, eliminati, bozze, tutti) e il fatto che all&amp;rsquo; interno del ciclo i messaggi sono convertiti dal formato binario al formato testo con il metodo della classe SmsTextMessage &lt;strong&gt;.FromBinaryMessage()&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cancellazione messaggi dal message store&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5758.clip_5F00_image016_5F00_12B4C42B.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image016" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5282.clip_5F00_image016_5F00_thumb_5F00_3F5D7E04.png" alt="clip_image016" width="244" height="53" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tralasciando il codice gi&amp;agrave; spiegato nello snippet precedente, le righe 6-7 mostrano come sia possibile cancellare in massa pi&amp;ugrave; messaggi semplicemente specificandone il tipo grazie all&amp;rsquo; enumerazione spiegata prima, oppure come cancellare un singolo messaggio specificandone l&amp;rsquo;id al&amp;rsquo; interno della lista instanziata in riga 3. La sottile differenza dei due metodi sta nel fatto che uno &amp;egrave; singolare e l&amp;rsquo;altro &amp;egrave; plurale!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sottoscrizione e cancellazione ad eventi (messaggio ricevuto, stato device cambiato)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4718.clip_5F00_image018_5F00_772FC227.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image018" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3755.clip_5F00_image018_5F00_thumb_5F00_6B2DD1F3.png" alt="clip_image018" width="244" height="69" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Intellisense provveder&amp;agrave; creare i metodi di callback, nel primo caso un parametro del metodo sar&amp;agrave; una variabile che permetter&amp;agrave; di ottenere info sull&amp;rsquo; SMS appena ricevuto, mentre nel secondo caso si potr&amp;agrave; capire in che modo il dispositivo ha cambiato stato tramite la propriet&amp;agrave; &lt;strong&gt;.DeviceStatus&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;Autenticazione via SMS concetti e algoritmi&lt;/h4&gt;
&lt;p&gt;Ora che abbiamo visto come poter sfruttare un MB device in Windows 8 per poter fare inviare sms alla nostra app, vediamo che tipo di approccio dobbiamo avere per essere sicuri dell&amp;rsquo; efficacia di questo metodo. In questo articolo vedremo l&amp;rsquo;implementazione .NET degli algoritmi pi&amp;ugrave; usati in questi casi ovvero quelli definiti nei documenti RFC4226 e l&amp;rsquo; RFC6238. Il primo fornisce una autenticazione basata su contatore mentre il secondo una basata su un determinato time span calcolato sul tempo UNIX. In questo articolo vedremo nel dettaglio il primo algoritmo (dato che per il secondo l&amp;rsquo;unica differenza sta nel primo valore fornito in input, che varia da un intero, ad un valore intero random dipendente dalla seguente formula calcolato su un intervallo di 30 secondi)&lt;/p&gt;
&lt;p&gt;Y = (Now-UNIX_time) /30&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Algoritmo RFC4226&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;algoritmo &amp;egrave; definite come segue:&lt;/p&gt;
&lt;p&gt;1. Prendi in input il numero di volte che &amp;egrave; stato eseguito l&amp;rsquo;algoritmo + 1 insieme alla secret key&lt;/p&gt;
&lt;p&gt;2. Incapsula tutto in un array di byte e calcola il SHA1 HMAC&lt;/p&gt;
&lt;p&gt;3. Esegui delle operazioni bitwise e calcola il modulo del risulta dividendolo per 10^x dove X &amp;egrave; il numero di cifre che vogliamo abbia il nostro codice di verifica.&lt;/p&gt;
&lt;p&gt;4. Nel caso in cui il risultato dello step 3 abbia meno cifre di X fai un padding con zero&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code snippet dell&amp;rsquo; algoritmo e chiamata del metodo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5545.clip_5F00_image020_5F00_54F7B6A1.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image020" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4503.clip_5F00_image020_5F00_thumb_5F00_0968631D.png" alt="clip_image020" width="226" height="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il codice appena riportato &amp;egrave; inserito dentro una Task&amp;lt;T&amp;gt; poich&amp;eacute; proviene da un cloud service hostato su Windows Azure.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0310.clip_5F00_image022_5F00_1589DD44.png"&gt;&lt;img style="margin: 0px; display: inline; background-image: none;" title="clip_image022" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0257.clip_5F00_image022_5F00_thumb_5F00_6D0AFB2F.png" alt="clip_image022" width="244" height="109" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Questo snippet mostra la chiamata a tale funzione e l&amp;rsquo;invio del codice via sms. La classe &lt;strong&gt;SmsAuthServiceClient&lt;/strong&gt; esiste perch&amp;eacute; deriva da una service reference che punta al cloud service dove &amp;egrave; definito l&amp;rsquo;algoritmo della pagina precedente&lt;/p&gt;
&lt;p&gt;Per quanto riguarda l&amp;rsquo;algoritmo RFC6238 il metodo avr&amp;agrave; un parametro ovvero la chiave segreta e il resto sar&amp;agrave; tutto definito a run time. Sotto &amp;egrave; riportato l&amp;rsquo;algoritmo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2350.clip_5F00_image024_5F00_19B3B509.png"&gt;&lt;img style="display: inline; background-image: none;" title="clip_image024" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0131.clip_5F00_image024_5F00_thumb_5F00_7134D2F4.png" alt="clip_image024" width="244" height="97" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Grazie per avere letto questo articolo e per ora &amp;egrave; tutto, se hai suggerimenti dubbi o domande contattami pure all&amp;rsquo; indirizzo email: &lt;a href="mailto:gcarlo.lelli@outlook.com"&gt;gcarlo.lelli@outlook.com&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421125" width="1" height="1"&gt;</description></item><item><title>Aspettando Windows 8.1…</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/16/aspettando-windows-8-1.aspx</link><pubDate>Thu, 16 May 2013 17:56:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10419407</guid><dc:creator>Lorenzo Barbieri [MSFT]</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10419407</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/16/aspettando-windows-8-1.aspx#comments</comments><description>&lt;p&gt;…potete sempre &lt;a href="http://www.microsoft.com/italy/appmeup" target="_blank"&gt;sviluppare una o più app per Windows 8&lt;/a&gt;, in modo da essere pronti al nuovo sistema operativo, che &lt;a href="http://blogs.windows.com/windows/b/bloggingwindows/archive/2013/05/14/windows-keeps-getting-better.aspx" target="_blank"&gt;&lt;strong&gt;sarà disponibile gratuitamente per tutti gli utenti che hanno&lt;/strong&gt; &lt;strong&gt;Windows 8&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In attesa di &lt;a href="http://buildwindows.com/" target="_blank"&gt;Build 2013&lt;/a&gt; (a San Francisco a fine giugno) dove verranno presentate tutte le novità e rese disponibili le preview su cui testare tutte le innovazioni, se non avete mai sviluppato &lt;strong&gt;un’app per il Windows Store&lt;/strong&gt; vi ricordo che potete usare &lt;strong&gt;C#/VB e XAML, HTML5 e JavaScript oppure C++ con XAML o direttamente DirectX&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Sul &lt;a href="http://dev.windows.com" target="_blank"&gt;Windows Store&lt;/a&gt; è possibile “prenotare” i nomi delle applicazioni, che devono essere univoci, per cui se avete già applicazioni su altre piattaforme o se avete un’idea geniale non aspettate. Registratevi e bloccate i nomi delle app che volete realizzare, prima che li prenda qualcun altro.&lt;/p&gt;  &lt;p&gt;Le app possono essere gratuite, a pagamento (con la trial opzionale) e supportare l’acquisto all’interno dell’app stessa di funzionalità aggiuntive. Possono inoltre supportare la pubblicità con il &lt;a href="http://pubcenter.microsoft.com/" target="_blank"&gt;PubCenter&lt;/a&gt; di Microsoft o con qualsiasi altro fornitore.&lt;/p&gt;  &lt;p&gt;Sono sempre di più gli SDK e gli strumenti che supportano Windows 8, molti anche multipiattaforma (Unity per fare un esempio, ma ce ne sono tantissimi altri).&lt;/p&gt;  &lt;p&gt;Se volete provare come gira la vostra app su Windows 8 (x86/x64 o ARM) vi invito a venire ad una delle &lt;a href="http://blogs.msdn.com/b/italy/archive/2013/05/08/pisa-perugia-cosenza-catania-milano-cagliari-roma-cesena-dev-camp-dotnetcampus-community-days-di-tutto-di-pi-249.aspx" target="_blank"&gt;prossime tappe del tour che si concluderà a giugno&lt;/a&gt; (Catania, Cagliari, Cesena, Milano e Roma sono le tappe dei prossimi giorni).&lt;/p&gt;  &lt;p&gt;Se vi serve documentazione potete guardare il nuovo &lt;a href="http://msdn.microsoft.com/it-it/windows/default.aspx" target="_blank"&gt;DevCenter, appena rifatto&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5518.image_5F00_61ACD87C.png"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0741.image_5F00_thumb_5F00_29BA48BF.png" width="644" height="461" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se avete bisogno di ulteriori informazioni potete scriverci o lasciare un commento a questo post.&lt;/p&gt;  &lt;p&gt;Non aspettate!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;-&lt;/em&gt;&lt;a href="http://twitter.com/_geniodelmale" target="_blank"&gt;&lt;em&gt;Lorenzo&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10419407" width="1" height="1"&gt;</description></item><item><title>modern.IE (parte 2)</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/14/modern-ie-parte-2.aspx</link><pubDate>Tue, 14 May 2013 16:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10415952</guid><dc:creator>PietroBr</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10415952</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/14/modern-ie-parte-2.aspx#comments</comments><description>&lt;p&gt;Vi avevo già raccontato in un &lt;a href="http://blogs.msdn.com/b/italy/archive/2013/01/31/modern-ie.aspx"&gt;precedente post&lt;/a&gt; di modern.ie, il sito che vi dà la possibilità di testare errori comuni (e non) di vostri siti web. Inoltre è possibile testare il proprio sito su diversi browser e device utilizzando BrowserStack.&lt;/p&gt;  &lt;p&gt;Da &lt;a href="http://blogs.windows.com/international/b/italy/archive/2013/04/03/le-novit-224-di-modern-ie-download-gratuiti-di-vm-windows-8-quickstart-kit-e-un-migliore-code-scanning.aspx"&gt;circa un mese&lt;/a&gt; potete scaricare&amp;#160; anche &lt;a href="http://www.modern.ie/en-us/virtualization-tools#downloads"&gt;macchine virtuali per il test&lt;/a&gt; su &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Linux&lt;/strong&gt; e &lt;strong&gt;Mac&lt;/strong&gt;, scegliendo tra diverse piattaforme di virtualizzazione, ad esempio selezionando Windows e VirtualBox avrete così diverse versioni di IE su diverse piattaforme!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2352.image_5F00_3038A2AD.png"&gt;&lt;img title="image" style="display: inline;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1351.image_5F00_thumb_5F00_742C60F7.png" width="740" height="302" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Un’altra cosa interessante è che potete ora anche fare il test di siti protetti da Firewall scaricando una versione &lt;a href="http://virtualization.modern.ie/vhd/modern.ie.zip?10e3374d847343a78531a3fd386598a8"&gt;locale del sito moder.ie&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Per maggiori &lt;a href="http://blogs.windows.com/international/b/italy/archive/2013/04/03/le-novit-224-di-modern-ie-download-gratuiti-di-vm-windows-8-quickstart-kit-e-un-migliore-code-scanning.aspx"&gt;informazioni leggete qui&lt;/a&gt; e buon download!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415952" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/italy/archive/tags/IE/">IE</category></item><item><title>Pisa, Perugia, Cosenza, Catania, Milano, Cagliari, Roma, Cesena… Dev Camp, DotNetCampus, Community Days, di tutto di più…</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/08/pisa-perugia-cosenza-catania-milano-cagliari-roma-cesena-dev-camp-dotnetcampus-community-days-di-tutto-di-pi-249.aspx</link><pubDate>Wed, 08 May 2013 09:49:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10416936</guid><dc:creator>Lorenzo Barbieri [MSFT]</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10416936</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/08/pisa-perugia-cosenza-catania-milano-cagliari-roma-cesena-dev-camp-dotnetcampus-community-days-di-tutto-di-pi-249.aspx#comments</comments><description>&lt;p&gt;Nei prossimi giorni io e Pietro saremo in giro per l'Italia, io per vincere la maglia “blue”, lui invece ha già vinto la maglia “azure” &lt;img class="wlEmoticon wlEmoticon-smile" style="style" alt="Sorriso" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1346.wlEmoticon_2D00_smile_5F00_69572D0C.png" /&gt;&lt;/p&gt;  &lt;p&gt;Ecco le date con un po’ di informazioni:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032547694&amp;amp;culture=it-IT" target="_blank"&gt;9 maggio – Pisa – Dev Camp&lt;/a&gt; in collaborazione con DotNetToscana&lt;/li&gt;    &lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032548523&amp;amp;culture=it-IT" target="_blank"&gt;10 maggio – Perugia – Dev Camp&lt;/a&gt; in collaborazione con DotNetUmbria 2.0 (ci sarò io e il mitico Vito &lt;img class="wlEmoticon wlEmoticon-smile" style="style" alt="Sorriso" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1346.wlEmoticon_2D00_smile_5F00_69572D0C.png" /&gt;, Pietro si &lt;em&gt;eclisserà&lt;/em&gt; per tutta la giornata &lt;img class="wlEmoticon wlEmoticon-smilewithtongueout" style="style" alt="Con la lingua fuori" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6445.wlEmoticon_2D00_smilewithtongueout_5F00_6812942D.png" /&gt;)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://dotnetcampus.it/Register/Cosenza" target="_blank"&gt;15 maggio – Cosenza – DotNetCampus&lt;/a&gt; la più grande conferenza italiana su .NET fa tappa in Calabria, ci saremo anche io e Sara al laboratorio su Windows 8&lt;/li&gt;    &lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032549856&amp;amp;culture=it-IT" target="_blank"&gt;16 maggio – Torino – Dev Camp&lt;/a&gt; su Windows 8 organizzato dal MIC&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.communitydays.it/events/communitydays2013-catania/" target="_blank"&gt;20 e 21 maggio – Catania – Community Days&lt;/a&gt; – l’evento più importante organizzato dalle principali community Microsoft italiane, con speaker da tutta Italia, fa tappa in Sicilia per un evento memorabile!&lt;/li&gt;    &lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032549861&amp;amp;culture=it-IT" target="_blank"&gt;6 giugno – Torino – Dev Camp&lt;/a&gt; su Windows Phone organizzato dal MIC&lt;/li&gt;    &lt;li&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032553615&amp;amp;Culture=it-IT&amp;amp;community=0" target="_blank"&gt;7 giugno – Cagliari – Dev Camp&lt;/a&gt; -&amp;#160; io e Pietro saremo in Sardegna, iscrivetevi in tanti, altrimenti ci tocca andare al mare! &lt;img class="wlEmoticon wlEmoticon-islandwithapalmtree" style="style" alt="Isola con palma" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0268.wlEmoticon_2D00_islandwithapalmtree_5F00_1C46BD74.png" /&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://dotnetcampus.it/Register/Cesena" target="_blank"&gt;14 giugno – Cesena – DotNetCampus&lt;/a&gt;, nella suggestiva location del Technogym Village, l’ultima tappa del DotNetCampus, non mancate!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Mi raccomando, per tutti questi eventi i posti sono limitati, per cui iscrivetevi subito, non aspettate l’ultimo minuto!&lt;/p&gt;  &lt;p&gt;In molte tappe ci saranno per i più fortunati e/o bravi anche alcune sorprese!&lt;/p&gt;  &lt;p&gt;p.s. mancano i link alle tappe di Milano e Roma, aggiornerò il post quando saranno disponibili.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;-&lt;a href="http://www.twitter.com/_geniodelmale" target="_blank"&gt;Lorenzo&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416936" width="1" height="1"&gt;</description></item><item><title>Windows Azure Conf con DotNetLombardia – 6 Maggio</title><link>http://blogs.msdn.com/b/italy/archive/2013/05/02/windows-azure-conf-con-dotnetlombardia-6-maggio.aspx</link><pubDate>Thu, 02 May 2013 15:07:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10415664</guid><dc:creator>PietroBr</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10415664</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/05/02/windows-azure-conf-con-dotnetlombardia-6-maggio.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7573.image_5F00_219C6F3D.png"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5417.image_5F00_thumb_5F00_7989C01D.png" width="566" height="125" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Lunedì prossimo &lt;strong&gt;6 Maggio&lt;/strong&gt; si terrà un evento dedicato a &lt;strong&gt;Windows Azure&lt;/strong&gt;, organizzato dalla community &lt;strong&gt;DotNetLombardia &lt;/strong&gt;in collaborazione con Microsoft. L’obiettivo dell’evento è raccontare le funzionalità di Azure tramite esperienze reali di sviluppatori che utilizzano nella loro vita lavorativa diverse funzionalità di Windows Azure e condividere esperienze con le persone della community che spesso sono i primi utilizzatori di Windows Azure, sempre disponibili a dare consigli e condividere esperienze.&lt;/p&gt;  &lt;p&gt;Alla conferenza avrò la possibilità di raccontarvi in breve qualche ultima novità sulle funzionalità di Azure, introducendo la giornata organizzata dalla Community.&lt;/p&gt;  &lt;p&gt;L’evento di una giornata intera, totalmente &lt;strong&gt;gratuito&lt;/strong&gt;, si terrà nella sede Microsoft di Peschiera Borromeo e potete registrarvi sul &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=it-IT&amp;amp;EventID=1032552059"&gt;sito a questo link&lt;/a&gt;, dove trovate tutte le informazioni sulla logistica.&lt;/p&gt;  &lt;p&gt;Vi aspetto &amp;amp; Happy Coding!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415664" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/italy/archive/tags/Community/">Community</category><category domain="http://blogs.msdn.com/b/italy/archive/tags/Windows+Azure/">Windows Azure</category></item><item><title>Backup di Windows Server 2012 su Windows Azure</title><link>http://blogs.msdn.com/b/italy/archive/2013/04/22/backup-di-windows-server-2012-su-windows-azure.aspx</link><pubDate>Mon, 22 Apr 2013 10:22:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10412982</guid><dc:creator>Eva Gjeci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10412982</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/04/22/backup-di-windows-server-2012-su-windows-azure.aspx#comments</comments><description>&lt;p&gt;Con l’ultimo aggiornamento di Windows Azure è stato introdotto un nuovo servizio in anteprima, &lt;strong&gt;Recovery Services, &lt;/strong&gt;che mette a disposizione un nuovo modo semplice e intuitivo per effettuare il backup e il rispristino di Windows Server 2008 R2 SP1, Windows Server 2012, Windows Server 2012 Essentials e System Center Data Protection Manager 2012 SP1. &lt;/p&gt;  &lt;p&gt;È quindi ora possibile gestire il backup sul cloud attraverso gli strumenti familiari di Windows Server, sfruttando le nuove funzionalità di configurazione, monitoraggio e recupero dei backup su Windows Azure Storage. &lt;/p&gt;  &lt;p&gt;Questa guida nello specifico spiega passo a passo come effettuare il &lt;b&gt;backup di Windows Server 2012&lt;/b&gt; su Windows Azure.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Nota:&lt;/b&gt; per poter effettuare il backup di Windows Server 2012 su Windows Azure è necessario avere un certificato X.509 v3 per registrare il server. Il certificato deve avere una chiave lunga almeno 2048 bit che dovrebbe risiedere nel deposito dei certificati personali del computer locale. &lt;/p&gt;  &lt;p&gt;E’ possibile utilizzare:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;un certificato self-signed &lt;/li&gt;    &lt;li&gt;qualsiasi certificato SSL valido rilasciato da un autorità di certificazione (CA) considerata attendibile da Microsoft. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Per ulteriori informazioni consultare &lt;a href="http://support.microsoft.com/kb/931125"&gt;http://support.microsoft.com/kb/931125&lt;/a&gt;.     &lt;br /&gt;In questa guida utilizzeremo un &lt;strong&gt;certificato self-signed&lt;/strong&gt; generato con il tool di creazione dei certificati,&lt;strong&gt; makecert.exe.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Creazione del certificato self-signed&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Per creare il proprio certificato seguire i seguenti passaggi:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; a. Makecert.exe è disponibile come parte di Windows SDK che potete scaricare al seguente link: &lt;a href="http://go.microsoft.com/fwlink/?linkid=84091"&gt;http://go.microsoft.com/fwlink/?linkid=84091&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b. Installare Windows SDK per Windows 8. Il tool makecert.exe lo troverete in &lt;strong&gt;&amp;lt;system drive&amp;gt;:\Program Files (x86)\Windows Kits\8.0\bin\x64&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c. Lanciare il prompt dei comandi (cmd.exe) con privilegi da amministratore ed eseguire il seguente comando sostituendo &lt;i&gt;CertificateName&lt;/i&gt; con il nome che volete dare al vostro certificato:&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;makecert.exe -r -pe -n CN=CertificateName -ss my -sr localmachine -eku 1.3.6.1.5.5.7.3.2 -len 2048 -e 01/01/2016 CertificateName.cer&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d. Installare il certificato&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Abilitazione delle funzionalità in “Preview”&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Per attivare il &lt;strong&gt;Recovery Services&lt;/strong&gt; dal portale di gestione di Windows Azure è necessario:&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; a. Accedere al &lt;b&gt;portale di gestione&lt;/b&gt; di Windows Azure inserendo username/indirizzo email e password del proprio account;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5074.image_5F00_476EED18.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2335.image_5F00_thumb_5F00_39BC3110.png" width="329" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b. Sulla barra dei comandi in fondo alla pagina del portale di gestione, scegliere &lt;b&gt;New&lt;/b&gt;, quindi dalla voce &lt;b&gt;Data Services&lt;/b&gt; scegliere &lt;b&gt;Recovery Services&lt;/b&gt; e poi posizionarsi su &lt;b&gt;Backup Vault&lt;/b&gt; e cliccare sul link &lt;u&gt;preview program&lt;/u&gt; (come indicato nella figura sottostante)&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7446.image_5F00_582671F9.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6457.image_5F00_thumb_5F00_1D5EC923.png" width="370" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c. Dalla lista dei servizi in preview attivare il servizio di &lt;b&gt;Backup effettuando il sign up. &lt;/b&gt;Una volta ricevuta l’email di conferma di attivazione del servizio potrete tornare nel portale di gestione di Windows Azure e iniziare ad utilizzarlo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1145.image_5F00_067D2426.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2703.image_5F00_thumb_5F00_130AD142.png" width="354" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Creazione di un deposito per il backup&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Per creare il deposito per il backup del vostro server seguire i seguenti passaggi:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; a. Sulla barra dei comandi in fondo alla pagina del portale di gestione, scegliere &lt;b&gt;New&lt;/b&gt;, quindi dalla voce &lt;b&gt;Data Services&lt;/b&gt; scegliere &lt;b&gt;Recovery Services&lt;/b&gt; poi &lt;b&gt;Backup Vault&lt;/b&gt; poi &lt;b&gt;Quick Create:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - in &lt;strong&gt;Name&lt;/strong&gt;, inserire il nome del deposito per il backup;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - in &lt;strong&gt;Region&lt;/strong&gt;, selezionare la regione per l’archiviazione;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - &lt;/strong&gt;infine cliccare su &lt;strong&gt;Create Vault.&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1273.image_5F00_2743BA8E.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2251.image_5F00_thumb_5F00_53804172.png" width="434" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Dopo che l’account di archiviazione è stato creato lo status passerà ad &lt;i&gt;active&lt;/i&gt; e l’account sarà pronto ad essere utilizzato:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4401.image_5F00_393FD84E.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2337.image_5F00_thumb_5F00_184C65A7.png" width="343" height="67" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b. Prima di poter registrare il server di cui vogliamo gestire il backup si deve caricare il certificato. Sulla barra dei comandi a centro pagina cliccare &lt;b&gt;Manage Certificate&lt;/b&gt; e caricare il certificato (.cer) creato nel primo punto di questa guida. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1602.image_5F00_3B0D5A94.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8547.image_5F00_thumb_5F00_0528657A.png" width="263" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Download e &lt;/b&gt;&lt;b&gt;installazione&lt;/b&gt;&lt;b&gt; di Windows Azure Online Backup Agent&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Per poter eseguire il backup del server su Windows Azure è necessario prima scaricare e installare l’agente di backup sul vostro Windows Server 2012. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; a. Dalla Dashbord cliccare su &lt;b&gt;Download Agent e &lt;/b&gt;scaricare l’agente relativo a Windows server 2012 e System Center 2012 SP1;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1665.image_5F00_2950938A.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1273.image_5F00_thumb_5F00_07188804.png" width="341" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b. Installare l’agente nel server eseguendo WABIstaller.exe:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1. Verrà visualizzato l'avviso &lt;strong&gt;Informativa supplementare per il servizio&lt;/strong&gt;. Fare clic su &lt;strong&gt;Accetto le condizioni del contratto di assistenza&lt;/strong&gt; e quindi su &lt;strong&gt;OK&lt;/strong&gt; per continuare l'installazione;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. Nella pagina &lt;b&gt;Prerequisites Check&lt;/b&gt; verrà selezionato per l'installazione tutto il software mancante. Scegliere &lt;strong&gt;Next&lt;/strong&gt; per confermare l'installazione del software prerequisito e continuare l'installazione;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2262.image_5F00_36672A0D.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6076.image_5F00_thumb_5F00_671A31B8.png" width="275" height="222" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.&lt;strong&gt; &lt;/strong&gt;Nella pagina &lt;strong&gt;Installation Settings, s&lt;/strong&gt;pecificare un valore nei campi &lt;strong&gt;Installation Folder&lt;/strong&gt; e &lt;strong&gt;Cache Location&lt;/strong&gt; per Windows Azure Online Backup. La cartella di installazione predefinita è &lt;strong&gt;&amp;lt;system drive&amp;gt;:\Program Files\Windows Azure Online Backup Agent&lt;/strong&gt;. Per scegliere un nuovo percorso in cui creare la cartella &lt;strong&gt;Windows Azure Online Backup&lt;/strong&gt;, fare clic su &lt;strong&gt;Browse&lt;/strong&gt;. Durante il processo di installazione verrà creata una cartella denominata &lt;strong&gt;Scratch&lt;/strong&gt; all'interno della cartella &lt;strong&gt;Agente di Windows Azure Online Backup Agent&lt;/strong&gt; nel percorso della cache. Nel percorso della cache deve essere disponibile uno spazio minimo di 2,5 GB. Dopo avere identificato le cartelle che dovranno essere utilizzate dall'Windows Azure Online Backup Agent, fare clic su &lt;strong&gt;Next;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5808.image_5F00_17CD3964.png"&gt;&lt;img title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6560.image_5F00_thumb_5F00_043FD9C3.png" width="290" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.&lt;strong&gt; &lt;/strong&gt;Verrà visualizzata la pagina &lt;strong&gt;Installation&lt;/strong&gt;. Quando l'installazione ha inizio viene visualizzato un indicatore di stato, che indica lo stato dell'installazione. Al termine dell'installazione, verrà visualizzato un messaggio per informare che l'installazione dell'Windows Azure Online Backup Agent è stata completata. A questo punto è possibile scegliere se verificare la disponibilità di aggiornamenti. È consigliabile consentire il controllo degli aggiornamenti.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Fare clic su &lt;strong&gt;Finish&lt;/strong&gt;. Se si è scelto di verificare la disponibilità di aggiornamenti, verrà avviato automaticamente Internet Explorer e verrà eseguito il controllo. Dopo l'installazione di eventuali aggiornamenti, è possibile iniziare a configurare l'Windows Azure Online Backup Agent.&lt;/p&gt; &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4403.image_5F00_09AE4A67.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8623.image_5F00_thumb_5F00_216581CD.png" width="307" height="248" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;Registrazione&lt;/b&gt;&lt;b&gt; del server con Windows Azure Online Backup Agent&lt;/b&gt;&lt;/p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; a.&lt;strong&gt; &lt;/strong&gt;Eseguire l’agente Windows Azure Backup appena installato e scegliere &lt;strong&gt;Register server&lt;/strong&gt; dal menu &lt;strong&gt;Action&lt;/strong&gt; per avviare la &lt;strong&gt;Registrazione guidata server;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&amp;#160; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b. Verrà visualizzata la pagina &lt;strong&gt;Proxy Configuration&lt;/strong&gt;. Se si desidera che l'Windows Azure Online Backup Agent utilizzi un server proxy univoco per la connessione Internet, fare clic su &lt;strong&gt;Use a proxy server for Windows Azure Online Backup&lt;/strong&gt; e quindi digitare l'URL del server proxy. Utilizzare il nome di dominio completo o l'indirizzo IP del server proxy, ad esempio http://proxy.corp.contoso.com oppure http://10.186.173.132, e il numero di porta del server configurato per le connessioni Internet.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5074.image_5F00_391CB933.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2335.image_5F00_thumb_5F00_3E8B29D7.png" width="309" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se il server proxy richiede l'autenticazione prima di consentire connessioni, fare clic su &lt;strong&gt;The proxy server requests authentication&lt;/strong&gt; quindi digitare il nome utente e la password che l'Windows Azure Online Backup Agent dovrà inviare quando vengono richieste le credenziali. Scegliere &lt;strong&gt;Next&lt;/strong&gt; per continuare;&lt;/p&gt;&amp;#160;&amp;#160;&amp;#160; c. Verrà visualizzata la pagina &lt;b&gt;Vault Identification&lt;/b&gt;. Caricate il certificato creato e specificate il &lt;b&gt;Backup Vault&lt;/b&gt; di Windows Azure su cuoi volete che venga memorizzato il backup;&amp;#160; &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2335.image_5F00_2AFDCA36.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6457.image_5F00_thumb_5F00_74ACA226.png" width="324" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160; d. Verrà visualizzata la pagina &lt;strong&gt;Encryption Setting&lt;/strong&gt;. In &lt;strong&gt;Enter Passphrase &lt;/strong&gt;digitare una passphrase composta da almeno 16 caratteri per crittografare i backup dal server. Per creare una passphrase casuale, fare clic su &lt;strong&gt;Generate passphrase&lt;/strong&gt;. In questa fase è necessario specificare una passphrase per proteggere la riservatezza del backup. È consigliato salvare una copia in locale di questa passphrase poiché non è possibile chiamare Microsoft in seguito per ottenere l’accesso ai vostri dati se dimenticate o perdete questa frase;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7103.image_5F00_28086583.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1731.image_5F00_thumb_5F00_265799AF.png" width="339" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Dopo avere immesso la passphrase, fare clic su &lt;strong&gt;Register&lt;/strong&gt; per iniziare il processo di registrazione del server. In caso di esito positivo, verrà visualizzato un messaggio di conferma della registrazione e sarà quindi possibile chiudere la procedura guidata.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160; e. Programmare il backup cliccando su &lt;b&gt;Scehdule Backup;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2816.image_5F00_68E73527.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6102.image_5F00_thumb_5F00_3BF1D24C.png" width="347" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f. Cliccate su &lt;b&gt;Add Items&lt;/b&gt; per aggiungere i file e le cartelle per il backup;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4861.image_5F00_416042F0.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/7673.image_5F00_thumb_5F00_06989A1A.png" width="354" height="256" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; g. Cliccare &lt;b&gt;Next&lt;/b&gt; e successivamente specificate quando dovrà essere effettuato il backup specificando per quanti giorni dovrà essere effettuato;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/3056.image_5F00_6FF64BD2.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8540.image_5F00_thumb_5F00_1C32D2B7.png" width="366" height="262" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; h. Cliccare &lt;b&gt;Finish&lt;/b&gt; e successivamente &lt;b&gt;Close&lt;/b&gt; per completare la procedura;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/0714.image_5F00_1A8206E3.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2867.image_5F00_thumb_5F00_4AC8DB99.png" width="383" height="277" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Per ulteriori approfondimenti:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/hh831419.aspx"&gt;http://technet.microsoft.com/en-us/library/hh831419.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/dn169036.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/dn169036.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/171fe77a-8686-4dd1-a45a-b44df729b40b"&gt;http://msdn.microsoft.com/en-us/171fe77a-8686-4dd1-a45a-b44df729b40b&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10412982" width="1" height="1"&gt;</description></item><item><title>Backup di SQL Server 2012 su Windows Azure</title><link>http://blogs.msdn.com/b/italy/archive/2013/04/19/backup-di-sql-server-2012-su-windows-azure.aspx</link><pubDate>Fri, 19 Apr 2013 14:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10412580</guid><dc:creator>Eva Gjeci</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/italy/rsscomments.aspx?WeblogPostID=10412580</wfw:commentRss><comments>http://blogs.msdn.com/b/italy/archive/2013/04/19/backup-di-sql-server-2012-su-windows-azure.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;A partire dall’aggiornamento cumulativo 2 di &lt;/font&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=35575"&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;SQL Server 2012 SP1&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;, è possibile fare il &lt;strong&gt;backup e il restore&lt;/strong&gt; sul Blob Storage di Windows Azure, sfruttando le funzionalità native di &lt;strong&gt;SQL Server&lt;/strong&gt; sia che esso sia on-premise all’interno dell’azienda o che sia ospitato all’interno di una Virtual Machine. Il database SQL, consente di creare, scalare ed estendere rapidamente le applicazioni localmente e nel cloud con strumenti familiari permettendo così di &lt;strong&gt;archiviare economicamente&lt;/strong&gt; dati quali video, audio e immagini. L’esecuzione del backup nel cloud garantisce vantaggi quali disponibilità, archiviazione illimitata in una posizione esterna replicata a livello geografico e facilità di migrazione dei dati nel cloud. Questa funzionalità, introdotta in SQL Server 2012 SP1 CU2, consente di eseguire il Backup o Restore tramite T-SQL o SMO. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Ecco quindi una guida passo a passo che spiega come effettuare il backup dei database SQL Server 2012 su Windows Azure &lt;strong&gt;in soli 4 step&lt;/strong&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&lt;strong&gt;1. &lt;/strong&gt;&lt;strong&gt;Creazione dell’account di archiviazione su Windows Azure&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Per creare un account di archiviazione dal portale di gestione di Windows Azure, attenersi ai passaggi seguenti:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;a. Accedere al portale di gestione di Windows Azure con il proprio account:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6786.image_5F00_2AFAB23D.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2500.image_5F00_thumb_5F00_1628B9BD.png" width="356" height="208" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;b. Sulla barra dei comandi in fondo alla pagina del portale di gestione, scegliere &lt;strong&gt;New&lt;/strong&gt;, quindi dalla voce &lt;strong&gt;Data Services&lt;/strong&gt; scegliere &lt;strong&gt;Storage&lt;/strong&gt; e poi &lt;strong&gt;Quick Create:&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5545.image_5F00_58B85535.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8780.image_5F00_thumb_5F00_1D84796A.png" width="418" height="180" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; in &lt;strong&gt;URL&lt;/strong&gt;, inserire il nome di un sottodominio da usare nell’URL dell’account di archiviazione;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; in &lt;strong&gt;Region/Affinity Group&lt;/strong&gt;, selezionare la regione/gruppo di affinità per l’archiviazione;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; se non si desidera una geo-replica per il vostro account di archiviazione, spuntare la casella &lt;strong&gt;Enable Geo-Replication&lt;/strong&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; cliccare su &lt;strong&gt;Create Storage Account&lt;/strong&gt;. Dopo che l’account di archiviazione è stato creato lo status sarà online ed è pronto ad essere utilizzato;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5078.image_5F00_3C5AED48.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8228.image_5F00_thumb_5F00_4954CD59.png" width="413" height="74" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; sulla barra dei comandi a centro pagina cliccare &lt;strong&gt;Manage Keys &lt;/strong&gt;per visualizzare le informazioni sull’account. Copiare il nome dell’account di archiviazione e la chiave primaria di accesso. Queste informazioni sono necessarie per creare le credenziali di SQL Server utilizzate per accedere all’account di archiviazione e per creare il backup.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1881.2_5F00_28615AB2.png"&gt;&lt;font size="2"&gt;&lt;img title="2" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/6177.2_5F00_thumb_5F00_40189218.png" width="256" height="180" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;Creazione di un contenitore BLOB &lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;I BLOB costituiscono il modo più semplice di archiviare grandi quantità di dati binari o testo non strutturato quali video, audio e immagini. Un contenitore fornisce un raggruppamento di un set di BLOB. Un account di archiviazione può contenere un numero illimitato di contenitori e in un contenitore è possibile archiviare un numero illimitato di BLOB. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Per creare un contenitore :&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; selezionare l’account di archiviazione appena creato, fare click sulla scheda &lt;strong&gt;Containers&lt;/strong&gt;, quindi su &lt;strong&gt;Add Container&lt;/strong&gt; nella parte inferiore della schermata in cui verrà visualizzata una nuova finestra di dialogo;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4011.3_5F00_3101B33E.png"&gt;&lt;font size="2"&gt;&lt;img title="3" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="3" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/5584.3_5F00_thumb_5F00_0B97BFD0.png" width="334" height="265" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; immettere il nome associato al contenitore;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; selezionare Privato come tipologia di accesso. É consigliabile creare contenitori privati per proteggere i file di backup; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&lt;strong&gt;3. &lt;/strong&gt;&lt;strong&gt;Creare le credenziali di SQL Server&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Nelle credenziali di SQL Server sono archiviate le informazioni di autenticazione utilizzate da SQL Server per la scrittura o lettura di un BLOB nel servizio di archiviazione BLOB di Windows Azure. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Per creare le credenziali di SQL Server seguire i seguenti passaggi:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;- connettersi a SQL Server Management Studio&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/1781.image_5F00_7C80E0F5.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/4428.image_5F00_thumb_5F00_6D6A021B.png" width="321" height="244" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; in &lt;strong&gt;Object Explorer&lt;/strong&gt; connettersi all’istanza del motore di database con il database a cui fare il backup;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; sulla barra degli strumenti &lt;strong&gt;Standard&lt;/strong&gt; cliccare &lt;strong&gt;New Query&lt;/strong&gt;; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; copiare e incollare l’esempio seguente nella finestra &lt;strong&gt;Query&lt;/strong&gt; modificando il nome dell’account di archiviazione e la chiave primaria di accesso; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;blockquote&gt;&lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;code&gt;CREATE&lt;/code&gt; &lt;code&gt;CREDENTIAL mycredential&lt;/code&gt;&lt;/span&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;WITH&lt;/code&gt; &lt;code&gt;IDENTITY = &lt;/code&gt;&lt;code&gt;'%mystorageaccount%'&lt;/code&gt;&lt;code&gt;,&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;SECRET&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = &lt;/code&gt;&lt;code&gt;'%storage account access key%'&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dove: &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ‘%mystorageaccount%’ è il nome dell’account di archiviazione&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ‘%storage account access key%’ è la chiave primaria o secondaria del vostro account di archiviazione&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; verificare l’istruzione T-SQL e fare click su &lt;strong&gt;Execute&lt;/strong&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&lt;strong&gt;4. &lt;/strong&gt;&lt;strong&gt;Backup completo del database nel servizio di archiviazione BLOB di Windows Azure&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Per creare un backup completo del database attenersi ai passaggi seguenti:&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; da SQL Server Management Studio fare click su &lt;strong&gt;New Query&lt;/strong&gt; sulla barra del menu;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; copiare e incollare l’esempio seguente nella finestra &lt;strong&gt;Query&lt;/strong&gt;, modificando le informazioni necessarie, quindi fare click su &lt;strong&gt;Execute&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;blockquote&gt;&lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;code&gt;BACKUP &lt;/code&gt;&lt;code&gt;DATABASE&lt;/code&gt; &lt;code&gt;[dbName]&lt;/code&gt;&lt;/span&gt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;TO&lt;/code&gt; &lt;code&gt;URL = &lt;/code&gt;&lt;code&gt;'http://mystorageaccount.blob.core.windows.net/blobcontainername/dbName.bak'&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;WITH&lt;/code&gt; &lt;code&gt;CREDENTIAL = &lt;/code&gt;&lt;code&gt;'mycredential'&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;code&gt;&lt;span style="font-family: adobe arabic;"&gt;GO&lt;/span&gt;&lt;/code&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;blockquote&gt;&lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;code&gt;&lt;span style="font-family: segoe ui;"&gt;dove:&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;code&gt;&lt;span style="font-family: segoe ui;"&gt;l’URL include l’endpoint del servizio BLOB, seguito dal nome del contenitore e il nome del file di backup&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;code&gt;&lt;span style="font-family: segoe ui;"&gt;e ‘mycredential’ sono le credenziali create nel passo precedente&lt;/span&gt; &lt;/code&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; in &lt;strong&gt;Object explorer&lt;/strong&gt;, connettersi a Azure Storage. L’Account key richiesto è la chiave primaria o secondaria del vostro account di archiviazione. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/2364.image_5F00_07C9F533.png"&gt;&lt;font size="2"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-87-58-metablogapi/8540.image_5F00_thumb_5F00_66D6828B.png" width="369" height="152" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Sfogliare per individuare il contenitore e il file di backup appena creato.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Infine per eseguire il restore da un backup del database attenersi ai seguenti passaggi:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; da SQL Server Management Studio fare click su &lt;strong&gt;New Query&lt;/strong&gt; sulla barra del menu;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;-&amp;#160; copiare e incollare l’esempio seguente nella finestra &lt;strong&gt;Query&lt;/strong&gt;, modificando le informazioni necessarie, quindi fare click su &lt;strong&gt;Execute&lt;/strong&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;blockquote&gt;&lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;code&gt;RESTORE &lt;/code&gt;&lt;code&gt;DATABASE&lt;/code&gt; &lt;code&gt;dbName&lt;/code&gt;&lt;/span&gt;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;FROM&lt;/code&gt; &lt;code&gt;URL = '&lt;/code&gt;&lt;code&gt;http://mystorageaccount.blob.core.windows.net/blobcontainername/dbName.bak'&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;font size="2"&gt;&lt;code&gt;WITH&lt;/code&gt; &lt;code&gt;CREDENTIAL = &lt;/code&gt;&lt;code&gt;'mycredential'&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;code&gt;&lt;span style="font-family: adobe arabic;"&gt;GO&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;blockquote&gt;&lt;font size="2"&gt;&lt;/font&gt;    &lt;p&gt;&lt;span style="font-family: adobe arabic;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;code&gt;&lt;font size="2"&gt;&amp;#160;&lt;/font&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;font size="2"&gt;&lt;/font&gt;&lt;/blockquote&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;Per Approfondimenti:&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;font size="2"&gt;· &lt;/font&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/jj919148.aspx" href="http://msdn.microsoft.com/en-us/library/jj919148.aspx"&gt;&lt;font size="2"&gt;http://msdn.microsoft.com/en-us/library/jj919148.aspx&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10412580" width="1" height="1"&gt;</description></item></channel></rss>