<?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>Giuseppe Guerrasio</title><link>http://blogs.msdn.com/giuseppeguerrasio/default.aspx</link><description>Building the next web platform</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Windows Azure Hello World !!</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/09/17/windows-azure-hello-world.aspx</link><pubDate>Thu, 17 Sep 2009 14:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9896352</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9896352.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9896352</wfw:commentRss><description>&lt;P&gt;Il cloud computing è una delle nuove e più interessanti frontiere del mondo dell’IT che si sta oramai affermando come una realtà e che promette di trasformare in modo significativo, la disponibilità delle classiche risorse che oggi cerchiamo in un hardware e in un sistema operativo installati in un data center locale. Con lo sviluppo per Internet di piattaforme di questo tipo, si aprono nuovi scenari che vanno oltre a quello che oggi è possibile fare in termini di servizi e dati sulla rete, aprendo la strada a veri e propri sistemi operativi self service dove si possono ottenere su richiesta ed in modo rapido, capacità di elaborazione, storage, servizi di database, etc . Diventa molto più semplice sviluppare nuove idee di servizi e soluzioni ed ottenere ad un minor costo le risorse per poterle sviluppare e pubblicare su Internet. Si avvia, inoltre, la pianificazione di una trasformazione di molti servizi aziendali che, nel tempo, si sposteranno nei nuovi grandi datacenter che, sviluppandosi in modo rapido, stanno materializzando l’infrastruttura per rendere il cloud computing una realtà.&lt;/P&gt;
&lt;P&gt;Con il rilascio della CTP di Agosto, la soluzione per il Cloud di Microsoft ovvero &lt;A href="http://www.azure.com/" mce_href="http://www.azure.com/"&gt;Windows Azure Platform &lt;/A&gt;si avvicina al rilascio ufficiale di una prima serie di servizi di Cloud Computing. La nuova release ci ha messo a disposizione una nuova versione degli strumenti di sviluppo e gli SDK per costruire soluzioni che possano poi essere distribuite e gestite sulla piattaforma, e la possibilità di accedere a degli spazi di test attivabili su richiesta e disponibili immediatamente per poter poi provare ad effettuare un deployment reale di dati ed applicazioni sulla piattaforma per il Cloud. Tra le novità più interessanti la trasformazione dei servizi di database che cambiano anche nome in Slq Azure e che ci mettono a disposizione una vera e propria infrastruttura Sql Sever pensata per il Cloud e utilizzabile su richiesta .&lt;/P&gt;
&lt;P&gt;Windows Azure Platform è una vera e propria piattaforma di sviluppo pensata per il Cloud Computing, ospitata in data center di Microsoft distribuiti in diverse zone del mondo, che fornisce un sistema operativo per il cloud (Windows Azure ) e un set di servizi per gli sviluppatori che possono essere utilizzati in combinazione o singolarmente, per sviluppare e eseguire nuove applicazioni che vengono poi gestite sulla nuova piattaforma e che possono integrarsi semplicemente anche con applicazioni locali già esistenti.&lt;/P&gt;
&lt;P&gt;Questa piattaforma oltre ad offrire i suoi servizi di base per un utilizzo diretto è anche l’infrastruttura sulla quale Microsoft sta sviluppando anche le sue soluzioni SaaS.&lt;/P&gt;
&lt;P&gt;Di seguito un’immagine della piattaforma complessiva &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image001_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image001_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001 border=0 alt=clip_image001 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image001_thumb.jpg" width=541 height=252 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image001_thumb.jpg"&gt;&lt;/A&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Si va dai servizi di base offerti dal sistema operativo per il cloud Windows Azure, ai servizi di Internet Service Bus dei .NET Services, ai servizi di Database di Sql Azure.&lt;/P&gt;
&lt;P&gt;Con il sistema operativo per il cloud della Windows Azure Platform, ovvero Windows Azure vengono messe a disposizione, su richiesta, quelli che sono i servizi fondamentali che siamo abituati a trovare in un sistema operativo installato in un computer locale. Essenzialmente abbiamo:&lt;/P&gt;
&lt;P&gt;- Capacità di elaborazione&lt;/P&gt;
&lt;P&gt;- Storage (Tabelle, Blob, Code asincrone)&lt;/P&gt;
&lt;P&gt;- Deployment, Monitoring e Maintenance&lt;/P&gt;
&lt;P&gt;- Servizi automatici di Management, Load Balancers, DNS&lt;/P&gt;
&lt;P&gt;- Ambiente di programmazione&lt;/P&gt;
&lt;P&gt;I diversi servizi possono essere utilizzati in modo singolo o in combinazione tra loro per realizzare soluzione più complesse. Ad esempio lo storage può essere usato per depositare informazioni, dati o file, sia per applicazioni che poi si eseguono in Windows Azure sia per applicazioni che invece vengono eseguite localmente in un nostro datacenter e che usano lo storage del sistema operativo per il Cloud che è ospitato nei data center di Microsoft, sfruttando le API HTTP REST che la piattaforma mette a disposizione per questi servizi.&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;La piattaforma fornisce le funzionalità e le risorse per le nostre applicazioni in base alle configurazioni impostate , garantendo una scalabilità praticamente infinita e un rapido adeguamento delle risorse fornite in base alle necessità richieste. I servizi vengono direttamente messi a disposizione delle applicazioni e tutta la classica attività di manutenzione, patching, monitoring del sistema di base, load balancing, DNS, etc , viene gestita automaticamente, liberandoci dai costi di gestione e manutenzione del software di base, permettendoci così, di concentrarci esclusivamente sul livello applicativo.&lt;/P&gt;
&lt;P&gt;Tutta la parte di amministrazione delle configurazioni e deployment di Windows Azure si può gestire attraverso l’interfaccia Web di amministrazione che si trova a &lt;A href="https://windows.azure.com/" mce_href="https://windows.azure.com/"&gt;https://windows.azure.com/&lt;/A&gt; dove si può accedere con il proprio Live Id &lt;STRONG&gt;accertandosi di aver prima impostato sulla nazionalità italiana i parametri di nazionalità del profilo del vostro LiveID su Windows Live &lt;/STRONG&gt;e creare un developer account. &lt;/P&gt;
&lt;P&gt;Potete verificare che sia impostata la nazionalità italiana sul vostro LiveID qui &lt;A href="https://account.live.com/"&gt;https://account.live.com/&lt;/A&gt; :&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_91C6/image_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_91C6/image_thumb_1.png" width=440 height=308&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Per eventualmente cambiarlo si può usare il menù Profile details ed entrare a modificare i dati del profilo della nazionalità.&lt;/P&gt;
&lt;P&gt;Tramite&amp;nbsp; l’ interfaccia del portale di Windows Azure si possono anche gestire le applicazioni che ed i servizi della piattaforma. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image003_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image003_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image003 border=0 alt=clip_image003 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image003_thumb.jpg" width=659 height=393 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image003_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Per poter successivamente creare una applicazione di test , oltre a registrarsi sul portale, occorre richiedere un token gratuito di test da utilizzare poi per l’attivazione, come spiegherò successivamente nel post quando procederemo alla pubblicazione dell’applicazione. &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Per poter sviluppare soluzioni per Windows Azure è disponibile anche un SDK e dei Tool completamente integrati con Visual Studio che mettono a disposizione degli specifici template per i progetti che possono essere scaricati da questa&amp;nbsp;&amp;nbsp; .&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image005_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image005_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image005 border=0 alt=clip_image005 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image005_thumb.jpg" width=639 height=155 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image005_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;La parte di SDK e Tool Per Visual Studio permette di sviluppare e eseguire il test delle vostre applicazioni .NET e delle storage completamente in locale, per poi andare ad effettuare il deployment delle soluzioni realizzate e dei metadati di configurazione delle risorse sulla piattaforma nel cloud. Si possono scaricare SDK e Tool per Visual Studio da questa &lt;A href="http://www.microsoft.com/azure/sdk.mspx" target=_blank mce_href="http://www.microsoft.com/azure/sdk.mspx"&gt;pagina&lt;/A&gt;&amp;nbsp; e sullo stesso sito si può trovare anche un interessante e completo &lt;A href="http://www.microsoft.com/azure/trainingkit.mspx" target=_blank mce_href="http://www.microsoft.com/azure/trainingkit.mspx"&gt;training kit&lt;/A&gt; con laboratori guidati per tutti i servizi e un ampia offerta di &lt;A href="http://www.microsoft.com/azure/resources.mspx" target=_blank mce_href="http://www.microsoft.com/azure/resources.mspx"&gt;video e documenti&lt;/A&gt; . &lt;/P&gt;
&lt;P&gt;Con la parte di sistema operativo di base della Windows Azure Platform , ovvero Windows Azure possiamo sviluppare due tipologie di applicazione :&lt;/P&gt;
&lt;P&gt;- Web Role (ASP.NET, WCF Service, FastCGI, etc)&lt;/P&gt;
&lt;P&gt;- Worker Role&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image007_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image007_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image007 border=0 alt=clip_image007 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image007_thumb.jpg" width=548 height=345 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image007_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Le Web Role sono come dice la parola stessa delle Web Application basate su pagine Web o Web Services. &lt;/P&gt;
&lt;P&gt;I Worker Role sono invece delle applicazioni che si eseguono in background per la realizzazione di Task specifici, concettualmente molto simili a quello che possiamo fare con i Windows Service sulla versione di Windows tradizionale. Un utilizzo tipico dei Worker Role è l’implementazione di processi asincroni partendo dalla lettura di informazioni che vengono inserite in una delle code asincrone di Windows Azure. Ad esempio , immaginando una applicazione che gestisce l’acquisizione di ordini o la trasformazione di immagini o comunque operazioni che non possono essere eseguite in modo sincrono rispetto all’inserimento della richiesta , possono essere per l’appunto gestite con un Worker Role che resta in attesa di richieste su una coda e avvia l’esecuzione dello specifico lavoro alla ricezione di un messaggio, disaccoppiando così l’esecuzione rispetto all’inserimento della richiesta. Nel caso della ricezione di un ordine ad esempio, ci potrebbe essere una applicazione Web Role che riceve le richieste e che scrive nello storage le informazioni relative all’ordine e poi inserisce in una coda la richiesta di esecuzione dell’ordine , che viene così ricevuta ed eseguita in modo asincrono dal Worker Roler. Anche le code di Windows Azure come le tabelle per I dati e I blob per I file, sono utilizzabili attraverso le API HTTP REST e quindi possono anche essere utilizzate da applicazioni che sono installate localmente.&lt;/P&gt;
&lt;P&gt;Associate alle applicazioni, oltre alle componenti di codice , abbiamo a disposizione dei metadati che consentono di configurare le risorse che vogliamo utilizzare sulla piattaforma elaborativa. Ad esempio possiamo stabilire in modo molto semplice il numero di istanze che vogliamo avere a disposizione da Windows Azure e sulle quali vogliamo far eseguire la nostra applicazione. In base a queste informazioni, sia nell’ambiente di test locale al PC sia nel deployment reale nei datacenter, il servizio di management di Windows Azure denominato FABRIC, provvederà a effettuare il deployment delle istanze che abbiamo richiesto, configurare I bilanciatori di carico e a garantire il funzionamento delle istanze, riavviando o sostituendo istanze che eventualmente avessero dei malfunzionamenti. FABRIC si occupa anche del patching e del management delle macchine virtuali all’interno delle quali si eseguiranno le nostre istanze, garantendoci sicurezza, funzionalità e continuità di servizio per l’ambiente di base in cui si eseguono le nostre applicazioni. A disposizione, inoltre,&amp;nbsp; i servizi di log applicativo per monitorare il comportamento del nostro codice in esecuzione su Windows Azure.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image009_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image009_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image009 border=0 alt=clip_image009 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image009_thumb.jpg" width=480 height=361 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image009_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Per cominciare ad introdursi allo sviluppo con questa parte di base della Windows Azure Platform, potete provare a partire con la classica applicazione Hello World !! seguendo i passi che ho descritto di seguito e che permettono di introdursi allo sviluppo e debug con gli strumenti del SDK e di Visual Studio su un PC client, per poi successivamente procedere al deployment sulla infrastruttura di Windows Azure nel Cloud .&lt;/P&gt;
&lt;P&gt;Installato &lt;A href="http://www.microsoft.com/azure/sdk.mspx" target=_blank mce_href="http://www.microsoft.com/azure/sdk.mspx"&gt;Windows Azure SDK e Tool per Visual Studio&lt;/A&gt; troverete un nuovo template tra I progetti da selezionare per avviare lo sviluppo di una nuova applicazione per il cloud:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image011_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image011_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image011 border=0 alt=clip_image011 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image011_thumb.jpg" width=619 height=403 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image011_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nello step successivo viene presentato un wizard che chiede il tipo di servizio che si vuole realizzare e procediamo con il selezionare una ASP.NET Web Role e proseguire&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image013_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image013_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image013 border=0 alt=clip_image013 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image013_thumb.jpg" width=728 height=534 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image013_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nella soluzione creata dal template possiamo vedere una applicazione ASP.NET identica alle applicazioni che sviluppiamo per il deployment su una infrastruttura Windows tradizionale, ed in più la parte di progetto per Windows Azure con I metadati di configurazione che puoi consistono in dei file XML:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image015_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image015_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image015 border=0 alt=clip_image015 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image015_thumb.jpg" width=290 height=331 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image015_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Con gli opportuni accorgimenti è assolutamente possibile sviluppare applicazioni che possano essere poi distribuite su server locali o sul datacenter di Windows Azure. Questa particolarità rappresenta uno dei maggiori vantaggi di Windows Azure perchè si possono sviluppare applicazioni che poi possono avere differenti modelli di deployment in funzione delle esigenze. Se , infatti, impostiamo come progetto di avvio la Web Application ed eseguiamo il debug abbiamo il normale deployment dell’applicazione nel Web Server locale di Visual Studio, se invece (come di default in questo tipo di progetto) impostiamo come progetto di avvio la cloud application ed avviamo il debug, abbiamo l’avvio dell’infrastruttura locale di test del Windows Azure SDK in cui vengono create n istanze in base alle configurazioni che vedremo successivamente e vedrete comparire nella taskbar le icone del servizio di Development Storage e di Development Fabric:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image017_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image017_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image017 border=0 alt=clip_image017 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image017_thumb.jpg" width=178 height=70 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image017_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Facendo click sul servizio di Development Fabric ( la rotellina) protrete visualizzare la finestra di controllo del Development Fabric dove vedrete attiva la vostra applicazione, per il momento con una sola istanza. Potrete anche vedere la finestra in cui vengono visualizzate le informazioni inserite nel log dall’ambiente ed eventualmente dal vostro codice utilizzando le specifiche API di Windows Azure.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image019_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image019_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image019 border=0 alt=clip_image019 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image019_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image019_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Inseriamo una Label nella pagina di Default e scriviamo sul load della pagina una riga per impostare il contenuto della Label con la scritta Hello World:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image021_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image021_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image021 border=0 alt=clip_image021 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image021_thumb.jpg" width=309 height=100 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image021_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image023_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image023_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image023 border=0 alt=clip_image023 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image023_thumb.jpg" width=373 height=174 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image023_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Inserendo un breakpoint sulla riga di codice e riavviando l’applicazione in debug con progetto di avvio impostato sul progetto Cloud si potrà effettuare il debug dell’applicazione all’interno del Development Fabric di Windows Azure.&lt;/P&gt;
&lt;P&gt;Per poter richiedere l’avvio di più istanze di può utilizzare il file xml di configurazione del nostro servizio di Web Role che è contenuto nel progetto per il cloud e che ha l’estensione .cscfg:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image025_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image025_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image025 border=0 alt=clip_image025 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image025_thumb.jpg" width=737 height=215 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image025_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Oppure selezionare il WebRole ed utilizzare la finestra delle proprietà ottenendo lo stesso risultato di modifica del file di configurazione.&lt;/P&gt;
&lt;P&gt;Riavviando il progetto in debug, vedremo nella finestra della Development Fabric che questa volta sono state avviate 3 istanze come richiesto. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image027_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image027_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image027 border=0 alt=clip_image027 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image027_thumb.jpg" width=531 height=400 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image027_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dal Task Manager del sitema operativo potete vedere i tre processi RdRoleHost.exe che contengono le tre istanze: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image029_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image029_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image029 border=0 alt=clip_image029 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image029_thumb.jpg" width=669 height=307 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image029_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Potete provare a terminare una delle istanze dei processi contenitore e noterete che la Development Fabric la riavvierà automaticamente.&lt;/P&gt;
&lt;P&gt;Riportiamo le istanze a 1 e riavviando verifichiamo che viene nuovamente caricata una sola istanza. Ricordatevi di riportare a 1 le istanze prima del deployment nell’applicazione di test su Windows Azure.&lt;/P&gt;
&lt;P&gt;Dopo esservi registrati sul portale &lt;A href="http://windows.azure.com/" mce_href="http://windows.azure.com"&gt;http://windows.azure.com&lt;/A&gt; con il vostro &lt;STRONG&gt;Live Id accertandosi&amp;nbsp; come spiegato prima di aver prima impostato sulla nazionalità italiana i parametri di nazionalità del profilo del vostro LiveID su Windows Live&lt;/STRONG&gt; , per poter effettuare il deployment&amp;nbsp; nel datacenter nel cloud occorre prima creare dal menù di Windows Azure una nuova applicazione in cui effettuare il deployment del nostro esempio. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Per attivare una applicazione, occorre ottenere un token di attivazione. Con la CTP di Agosto di Windows Azure è possibile ottenere dei token gratuiti di test attraverso il portale Microsoft Connect. Utilizzando il token di test si potra procedere al deployment.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Per richiedere il token di attivazione basta fare click sul link specifico nell'area Deploy a questa pagina &lt;A href="http://www.microsoft.com/windowsazure/getstarted/"&gt;http://www.microsoft.com/windowsazure/getstarted/&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image031_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image031_2.jpg"&gt;&lt;/A&gt;&lt;/U&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Il link vi porta sul portale Connect dove dopo essersi autenticati con Il Live ID di nazionalità italiana potrete richiedere il token di test gratuito da usare poi per attivare l’applicazione sul portale &lt;/STRONG&gt;&lt;A href="https://windows.azure.com/" mce_href="https://windows.azure.com/"&gt;&lt;STRONG&gt;https://windows.azure.com/&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt; . Il token vi verrà spedito appena disponibile (genericamente 48 ore)&amp;nbsp;sulla cassetta postale&amp;nbsp; del Live Id con cui l'avete richiesto iscrivendovi a connect.&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Il token dovrà essere inserito utilizzando il Link Account sul menù della Home Page del portale &lt;A href="https://windows.azure.com/" mce_href="https://windows.azure.com/"&gt;https://windows.azure.com/&lt;/A&gt; . Nell’area account c’è un link Manage My Tokens &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image033_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image033_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image033 border=0 alt=clip_image033 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image033_thumb.jpg" width=728 height=254 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image033_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dove potete inserire il token che avete ottenuto registrandovi sul portale Connect .&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Inserito il token facendo click sul voce del menù sulla destra Windows Azure, potrete accedere alla pagina di provisioning dove ora troverete attivato un progetto PDC08 come da figura che si è attivato con l’inserimento del token. Accedendo con il click sul link evidenziato del progetto &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image035_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image035_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image035 border=0 alt=clip_image035 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image035_thumb.jpg" width=646 height=261 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image035_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;potrete entrare nella pagina del progetto per aggiungere una applicazione con lo specifico comando New Service evidenziato&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image037_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image037_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image037 border=0 alt=clip_image037 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image037_thumb.jpg" width=655 height=292 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image037_thumb.jpg"&gt;&lt;/A&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Nello step successivo potrete creare una nuova Hosted Application chiamandola ad esempio test Azure usando lo specifico bottone (evidenziato sotto) e anche eventualmente uno spazio di storage . Per il nostro esercizio al momento basta la creazione della Hosted Application.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image039_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image039_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image039 border=0 alt=clip_image039 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image039_thumb.jpg" width=662 height=289 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image039_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Il wizard di creazione della hosted application prosegue chiedendovi le informazioni relative al nome con cui volete pubblicare lo spazio e le eventuali affinità con una specifica region e l’affinità eventuale con uno storage. Impostate solo un nome e lasciate le altre impostazioni sul default:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image041_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image041_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image041 border=0 alt=clip_image041 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image041_thumb.jpg" width=666 height=332 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image041_thumb.jpg"&gt;&lt;/A&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Preparato lo spazio per l’applicazione procediamo con il preparare il package di deployment. Dal menù Build di Visual Studio facendo click sulla voce Publish Cloud … o direttamente dal menù contestuale della Cloud Application in Visual Studio:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image043_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image043_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image043 border=0 alt=clip_image043 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image043_thumb.jpg" width=259 height=284 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image043_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Si otterrà la produzione da parte di Visual Studio del package di deployment della soluzione e dei file xml con i dati di configurazione &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image045_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image045_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image045 border=0 alt=clip_image045 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image045_thumb.jpg" width=533 height=240 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image045_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Verrà anche automaticamente aperto il browser con impostato l’url di deployment . Effettuato il logon nel portale di Windows Azure con il vostro Live Id con cui vi siete già registrati vi troverete nella pagina delle applicazioni in gestione e selezionando l’applicazione che avete attivato prima tramite il token.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image047_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image047_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image047 border=0 alt=clip_image047 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image047_thumb.jpg" width=555 height=270 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image047_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Con il pulsante deploy potrete provedere a portarvi sulla pagina di deployment ed a inserire con gli opportuni comandi di selezione di file il pakage dell’applicazione ed i metadati:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image049_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image049_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image049 border=0 alt=clip_image049 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image049_thumb.jpg" width=555 height=363 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image049_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image051_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image051_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image051 border=0 alt=clip_image051 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image051_thumb.jpg" width=558 height=374 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image051_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Terminata l’operazione di caricamento dei file vi ritroverete sulla pagina di gestione del progetto con i due ambienti di Produzione e di staging e con il pulsante Run posizionanto sotto l’area di staging potrete avviare l’applicazione in staging. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image053_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image053_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image053 border=0 alt=clip_image053 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image053_thumb.jpg" width=561 height=390 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image053_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Un apposito box vi segnala lo stato di avanzamento dell’operazione di avvio dell’istanza e l’url a cui sarà disponibile l’applicazione terminata l’operazione di avvio:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image055_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image055_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image055 border=0 alt=clip_image055 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image055_thumb.jpg" width=553 height=408 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image055_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Successivamente alla ricezione della conferma dell’avvio dellavostra applicazione:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image057_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image057_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image057 border=0 alt=clip_image057 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image057_thumb.jpg" width=558 height=414 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image057_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Potrete utilizzare l’URL indicato per navigare nella applicazione in staging ed eventualmente promuoverla in produzione con lo specifico comando.&lt;/P&gt;
&lt;P&gt;Con il pulsante Configure, invece, potrete accedere alla pagina che vi consente di modificare la parte di configurazione delle istanze e di accedere al log delle applicazioni:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image059_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image059_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image059 border=0 alt=clip_image059 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image059_thumb.jpg" width=565 height=461 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/WindowsAzureHelloWorld_DBD8/clip_image059_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9896352" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Rai Net have expanded use of Live Smooth Streaming for Sports Event: Roma 09 FINA Swimming world championships and Berlin 2009 Athletics World Championships</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/09/11/rai-net-have-expanded-use-of-live-smooth-streaming-for-sports-event-roma-09-fina-swimming-world-championships-and-berlin-2009-athletics-world-championships.aspx</link><pubDate>Fri, 11 Sep 2009 08:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9894017</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9894017.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9894017</wfw:commentRss><description>&lt;P&gt;How I introduced in my &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx"&gt;previous post&lt;/A&gt; , Rai Net the internet company of RAI, the Italian public broadcaster, during the last FIFA Confederations Cup South Africa 2009 delivered free, live Web broadcasting in high definition television quality (720p) of the Italian soccer team matches during the tournament using Live Smooth Streaming . &lt;/P&gt;
&lt;P&gt;Smooth Streaming is an innovative technology based on &lt;A href="http://www.iis.net/media" target=_blank mce_href="http://www.iis.net/media"&gt;IIS Media Services&lt;/A&gt; and Silverlight, which the scope to simplify and make a reality delivering video content at high quality level through Internet up to true HD for Live and VOD.&lt;/P&gt;
&lt;P&gt;Smooth Streaming permit to solve one of the most significant limits in Internet video streaming connected to typical behaviors of the last mile for reproducing High Quality videos with high bitrates.&amp;nbsp; When we think to the way that the content is delivered to the client, we have a lot of parameter that change every second during the client reproduction. In particular bandwidth and CPU power availability conditions change every second and causing a video glitch and buffering during the reproduction of the content, especially for the content at high level of bitrates, generating a poor user experience.&lt;/P&gt;
&lt;P&gt;During the reproduction of the content Smooth Streaming dynamically detects current network and local PC conditions, and seamlessly switches the video quality of a media file that a Silverlight player receives. Consumers with high-bandwidth connections and newer hardware can experience HD quality streaming, and others with lower bandwidth speeds or older hardware receive an appropriate stream for their conditions, allowing the audience to enjoy an uninterrupted streaming experience with the highest quality possible.&lt;/P&gt;
&lt;P&gt;In my &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx"&gt;previous post&lt;/A&gt; for Confederation Cup and for Smooth Streaming and in general and in the &lt;A href="http://www.iis.net/media" target=_blank mce_href="http://www.iis.net/media"&gt;official web site&lt;/A&gt; , you can found more information about this innovative technology &lt;/P&gt;
&lt;P&gt;After the success of this first test for Live Smooth Streaming, Rai Net have expanded the use of this technology for sports event on Rai Sport portal and delivered, up to true HD for Live and VOD after the Live event: Roma 09 FINA Swimming world championships and Berlin 2009 Athletics World Championships.&lt;/P&gt;
&lt;P&gt;In the follow pictures you can see some screen shots from Rai Sport Web Site from Roma 09 FINA Swimming world championships were you can see the adaptive part of smooth streaming at work:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image002 border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image002_thumb.jpg" width=663 height=430 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;An from Berlin 2009 Athletics World Championships:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image004 border=0 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image004_thumb.jpg" width=658 height=533 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image006 border=0 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image006_thumb.jpg" width=659 height=520 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The architecture used for these events is practically the same used for the Confederation Cup and illustrated in the &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx"&gt;previous post&lt;/A&gt;, with the exception of the CDN because for this event RAI use two different CDN and balance the load on both at 50%. In the follow picture you can see the architecture used for these two events:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image008 border=0 alt=clip_image008 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image008_thumb.jpg" width=665 height=451 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RaiNethaveexpandeduseofLiveSmoothStreami_632A/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The original HDTV 1080i signal in input is encoded in 7 different bitrates streams composed by a contiguous 2 secs video chunks codified in VC-1, created by 2 encoders. Each encoder creates 3-4 streams and synch through the encoders are achieved with a timecode generator in input in the encoders with the source video. Encoders push the streams to an origin server farm in load balancing were the two CDN pull for distribute Live, archive streaming and XAP code and offers these to Silverlight client player published on RAI.IT and RAI.TV portal . &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9894017" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Media/default.aspx">Media</category></item><item><title>Behaviors: rendere l’interattività semplice in Blend</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/26/behaviors-rendere-l-interattivit-semplice-in-blend.aspx</link><pubDate>Fri, 26 Jun 2009 08:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9804841</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9804841.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9804841</wfw:commentRss><description>&lt;P&gt;Tra gli elementi che restano più ostici in Blend 2 per il lavoro che un interaction designer può realizzare nell’implementazione degli elementi di una interfaccia grafica in Silverlight 2, c’è sicuramente il collegamento degli eventi di interazione sull’interfaccia con azioni da innescare nel codice o sugli oggetti presenti nell’interfaccia stessa. Questa operazione, infatti, ad oggi richiede , se pur in modo semplice, lo sviluppo di alcune righe di codice con cui non sempre ha familiarità chi si occupa di interaction design .&lt;/P&gt;
&lt;P&gt;Ad esempio immaginiamo di aver realizzato un’animazione e di volerla far eseguire alla pressione di un tasto sull’interfaccia, oppure di voler eseguire il play sul MediaElement inserito nella nostra interfaccia Silverlight in conseguenza di un click su un elemento del Visual Tree. Al momento tutte queste azioni in Blend 2 con Silverlight 2 comportano l’inserimento di un handler su uno specifico evento contenente almeno una riga di codice per invocare la specifica azione sull’oggetto che rappresenta l’animazione o il MediaElement all’interno dell’interfaccia in sviluppo.&lt;/P&gt;
&lt;P&gt;Per semplificare questo tipo di attività di sviluppo e consentire una rapida interazione per il designer che compone l’interfaccia con gli eventi e le azioni che si vogliono innescare in conseguenza degli eventi stessi in Blend 3 e Silverlight 3 sono stati inseriti i Behaviors come ben ci descrive &lt;A href="http://blogs.msdn.com/designexperience/archive/2009/06/26/expression-blend-beahavior-l-interazione-a-portata-di-click.aspx" target=_blank mce_href="http://blogs.msdn.com/designexperience/archive/2009/06/26/expression-blend-beahavior-l-interazione-a-portata-di-click.aspx"&gt;Roberto sul suo blog&lt;/A&gt; &amp;nbsp;.&lt;/P&gt;
&lt;P&gt;I Behaviors consentono per l’appunto l’esecuzione di specifiche azioni su di un target e sono associabili in modo dichiarativo ad uno specifico evento su un elemento della nostra interfaccia, sia attraverso una dichiarazione espressa con lo XAML sia direttamente dai menù di Blend associati all’elemento che poi implementano la dichiarazione nello XAML su cui si sta lavorando.&lt;/P&gt;
&lt;P&gt;Come si utilizzano i Behaviors ? Come prima cosa occorre referenziare nel progetto su cui si sta lavorando&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image002_2.gif" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image002_2.gif"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image002_thumb.gif" width=561 height=220 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image002_thumb.gif"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;la DLL che contiene l’implementazione dei Behaviors che vogliamo utilizzare la libreria di base per questa funzionalità che è contenuta per la preview di Blend 3, nella cartella ..Program Files\Microsoft Expression\Blend 3 Preview\Libraries\Silverlight con il nome Microsoft.Expression.Interactivity.dll . Per poter provare potete utilizzare il semplice esempio che ho implementato e che trovate &lt;A href="http://cid-d82de3153feb12ed.skydrive.live.com/self.aspx/Public/SilverlightDownload/SamplesBehaviors.zip" mce_href="http://cid-d82de3153feb12ed.skydrive.live.com/self.aspx/Public/SilverlightDownload/SamplesBehaviors.zip"&gt;qui&lt;/A&gt; per eseguire una animazione. Altri esempi di Behaviors potete scaricarli da &lt;A href="http://gallery.expression.microsoft.com/en-us/SampleSLBehaviors" mce_href="http://gallery.expression.microsoft.com/en-us/SampleSLBehaviors"&gt;http://gallery.expression.microsoft.com/en-us/SampleSLBehaviors&lt;/A&gt; . &lt;/P&gt;
&lt;P&gt;Effettuata questa operazione, selezionando dal menù dei controlli di Blend la Asset Library e da li selezionando la pagina dei Behaviors si potrà selezionare il Behaviors StartAnimation e trascinarlo sul bottone presente nella nostra interfaccia a cui vogliamo associare l’azione.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image004_thumb.jpg" width=495 height=270 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Fatta questa operazione, vedremo associato al bottone il behavior &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image006_thumb.jpg" width=392 height=219 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;e potremo configurare con il tab delle proprietà il nome dell’animazione da eseguire. Lo XAML generato per associare il Behaviors sarà il seguente :&lt;/P&gt;
&lt;P&gt;&amp;lt;Button x:Name="button" &amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i:Interaction.Triggers&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;i:EventTrigger EventName="Click"&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;si:StartAnimation AnimationName="test"/&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/i:EventTrigger&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;/P&gt;
&lt;P&gt;…………&lt;/P&gt;
&lt;P&gt;dove i: e si: sono rispettivamente i namespace che corrispondono alla libreria di base dei Behaviors e alla mia libreria che implementa il semplice StartAnimation.&lt;/P&gt;
&lt;P&gt;Attraverso la finestra delle proprietà si potrà impostare le proprietà del Behaviors tra cui il nome della animazione da eseguire sull’evento click del bottone a cui abbiamo associato il Behaviors stesso.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image008 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image008_thumb.jpg" width=341 height=359 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Eseguendo l’applicazione e facendo click sul bottone si eseguirà l’animazione test che dovrà ovviamente essre implementata nello usercontrol in cui si stautilizzando il Behaviors. &lt;/P&gt;
&lt;P&gt;Attraverso le proprietà possiamo anche modificare l’evento del Trigger che decide quando scatenare l’azione collegata al Behaviors come si vede nell’immagine precedente, in quei casi in cui sia esposta questa specifica funzionalità dal Behaviors associato all’elemento. Alcuni Behaviors permettono anche di specificare l’elemento target su cui l’azione associata deve essere eseguita come appunto l’esempio appena visto. E’ anche possibile, associare più Behaviors ad un singolo elemento. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Implementare i Behaviors&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Per implementare dei nostri Behaviors che possano essere poi utilizzati all’interno di Blend per semplificare il lavoro dello sviluppo dell’interazione con l’applicazione, si possono realizzare delle classi specifiche partendo dalle classi base definite nella libreria principale di questa funzionalità ovvero la dll Microsoft.Expression.Interactivity.dll (nella versione finale di Blend3 e Silverlight 3 il nome della libreria ed alcuni dettagli implementativi potrebbero cambiare).&lt;/P&gt;
&lt;P&gt;Un Behaviors è essenzialmente basato su tre concetti fondamentali : Trigger, Action e Behavior. I Trigger rappresentano uno degli elementi principali del funzionamento dei Behaviors, fornendo l’elemento che scatena l’ Action che poi produce lo specifico Behavior voluto. &lt;/P&gt;
&lt;P&gt;Ad esempio nel caso del nostro Behaviors StartAnimation il Trigger è l’elemento associato al click sul bottone che produce l’innesco dell’azione (start dell’animazione il cui nome è impostato sulla proprietà specifica).&lt;/P&gt;
&lt;P&gt;Per implementare un Trigger o estenderne di esistenti si utilizzando le classi definite nella libreria base citata sopra. Ad esempio per realizzare un nostro Trigger implementeremo una classe BaseBehaviorSample derivando dalla classe base specifica Microsoft.Expression.Interactivity .TriggerBase&amp;lt;DependencyObject&amp;gt; come da esempio:&lt;/P&gt;
&lt;P&gt;&lt;B&gt;public class BaseBehaviorSample : Microsoft.Expression.Interactivity.TriggerBase&amp;lt;DependencyObject&amp;gt; &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;{&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;}&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Questo tipo di Behaviors può essere associato a qualunque oggetto Silverlight che deriva da DependencyObject e per il momento non implementa nessuna particolare azione. La classe TriggerBase&amp;lt;T&amp;gt;&lt;/P&gt;
&lt;P&gt;public abstract class TriggerBase&amp;lt;T&amp;gt; : TriggerBase where T : System.Windows.DependencyObject&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected TriggerBase();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected T AssociatedObject { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected override sealed Type AssociatedObjectTypeConstraint { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Deriva a sua volta dalla classe :&lt;/P&gt;
&lt;P&gt;[ContentProperty("Actions")]&lt;/P&gt;
&lt;P&gt;public abstract class TriggerBase : DependencyObject, IAttachedObject&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public static readonly DependencyProperty ActionsProperty;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public TriggerActionCollection Actions { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected DependencyObject AssociatedObject { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual Type AssociatedObjectTypeConstraint { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public void Attach(DependencyObject dependencyObject);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public void Detach();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected void InvokeActions(object parameter);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual void OnAttached();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual void OnDetaching();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;L’implementazione dalla classe TriggerBase ci permette di effettuare l’override di due importanti metodi che implementa la classe base OnAttached e OnDetaching che corrispondono ai metodi che vengono invocati rispettivamente all’avvio ed al rilascio degli oggetti creati a partire da questa classe che stiamo realizzando. Il metodo InvokeActions è il metodo che invoca le azioni che vengono eventualmente associate al Trigger e la Dependency Property AssociatedObject rappresenta l’elemento a cui è stato associato il Trigger .&lt;/P&gt;
&lt;P&gt;Ad esempio, volendo implementare un Trigger che esegue un’azione sull’evento MouseLeftButtonDown sull’oggetto a cui associamo il trigger scriveremo il seguente codice, agganciando l’evento su cui vogliamo innescare l’azione in OnAttached e rimuovendolo su OnDetaching:&lt;/P&gt;
&lt;P&gt;public class BaseTriggerSample: Microsoft.Expression.Interactivity.TriggerBase&amp;lt;UIElement&amp;gt; &lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnAttached()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;base.OnAttached();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;this.AssociatedObject.MouseLeftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;this.InvokeActions(null);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected override void OnDetaching()&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;base.OnDetaching();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;this.AssociatedObject.MouseLeftButtonDown -= new MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In questo modo è evidente che si possono pensare di implementare un’ampia gamma di Triggers che possono poi essere usati come base per invocare specifiche Action. Ad esempio si possono realizzare dei Triggers che si eseguono nel momento in cui cambia lo stato della rete o su uno specifico timer , l’architettura implementata offre una ampia possibilità di estensione ed utilizzo. &lt;/P&gt;
&lt;P&gt;Oltre ai Trigger di base si possono implementare Behaviors che hanno un’associazione tra Trigger e una Action. Ad esempio derivando dalla classe TriggerAction :&lt;/P&gt;
&lt;P&gt;public abstract class TriggerAction : DependencyObject, IAttachedObject&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public static readonly DependencyProperty IsEnabledProperty;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected DependencyObject AssociatedObject { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual Type AssociatedObjectTypeConstraint { get; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;[DefaultValue(true)]&lt;/P&gt;
&lt;P&gt;public bool IsEnabled { get; set; }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public void Attach(DependencyObject dependencyObject);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;public void Detach();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected abstract void Invoke(object parameter);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual void OnAttached();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;protected virtual void OnDetaching();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Questa classe oltre ad avere a disposizione i metodi OnAttached e OnDetaching abbiamo la possibilità di implementare l’ovverride del metodo Invoke che è il metodo che viene invocato nel momento in cui si innesca il trigger. Ad esempio di seguito vediamo un semplice esempio che imposta l’opacity dell’oggetto su cui viene implementato:&lt;/P&gt;
&lt;P&gt;public class BaseTriggerAction : TriggerAction&amp;lt;UIElement&amp;gt;&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static readonly DependencyProperty OpacityProperty = DependencyProperty.Register("Opacity", typeof(double ), typeof(BaseTriggerAction), new PropertyMetadata(0.5)); &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public double Opacity&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (double )this.GetValue(BaseTriggerAction.OpacityProperty ); }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this.SetValue(BaseTriggerAction.OpacityProperty , value); }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void Invoke(object parameter)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.AssociatedObject.Opacity = this.Opacity ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Dall’interfaccia di Blend , quando agganciamo il nostro BaseTriggerAction ad un elemento che deriva da UIElement , ad esempio un bottone:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image010_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image010_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image010 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image010_thumb.jpg" width=389 height=277 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image010_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;possiamo anche selezionare su quale Trigger si deve innescare la Action associata come da immagine:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image012_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image012_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image012 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image012_thumb.jpg" width=340 height=336 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image012_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Specifici attributi con cui possiamo decorare la classe ci consentono di predeterminare l’evento su cui si innesca il Trigger. Ad esempio ammettendo di voler implementare un Behaviors che imposti automaticamente il Trigger a Click nel caso in cui lo colleghiamo ad un elemento che deriva da ButtonBase o all’evento MouseLeftButtonDown nel caso di un elemento UIElement generico, potremo decorare con gli specifici attributi la precedente classe come segue:&lt;/P&gt;
&lt;P&gt;[DefaultTrigger(typeof(ButtonBase), typeof(Microsoft.Expression.Interactivity.EventTrigger), new object[] { "Click" }),&lt;/P&gt;
&lt;P&gt;DefaultTrigger(typeof(UIElement), typeof(Microsoft.Expression.Interactivity.EventTrigger), new object[] { "MouseLeftButtonDown" })]&lt;/P&gt;
&lt;P&gt;public class BaseTriggerAction : TriggerAction&amp;lt;UIElement&amp;gt;&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public static readonly DependencyProperty OpacityProperty = DependencyProperty.Register("Opacity", typeof(double ), typeof(BaseTriggerAction), new PropertyMetadata(0.5));&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public double Opacity&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; get { return (double )this.GetValue(BaseTriggerAction.OpacityProperty ); }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set { this.SetValue(BaseTriggerAction.OpacityProperty , value); }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;protected override void Invoke(object parameter)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.AssociatedObject.Opacity = this.Opacity ;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Derivando da TargetedTriggerAction &lt;/P&gt;
&lt;P&gt;public abstract class TargetedTriggerAction&amp;lt;T&amp;gt; : TargetedTriggerAction where T : System.Windows.DependencyObject&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; protected TargetedTriggerAction();&lt;/P&gt;
&lt;P&gt;&amp;nbsp; protected T Target { get; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; protected virtual void OnTargetChanged(T oldTarget, T newTarget);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Avremo a disposizione la proprietà Target che si potrà utilizzare per definire l’elemento Target della nostra Azione associata al Behavior. Per esempio, tornando al nostro semplice esempio di configurazione dell’Opacity , si potrà definire attraverso la proprietà Target , l’elemento su cui impostare l’Opacity con l’azione implementata sul metodo Invoke:&lt;/P&gt;
&lt;P&gt;[DefaultTrigger(typeof(ButtonBase), typeof(Microsoft.Expression.Interactivity.EventTrigger), new object[] { "Click" }),&lt;/P&gt;
&lt;P&gt;DefaultTrigger(typeof(UIElement), typeof(Microsoft.Expression.Interactivity.EventTrigger), new object[] { "MouseLeftButtonDown" })]&lt;/P&gt;
&lt;P&gt;public class BaseTargetedTriggerAction : TargetedTriggerAction&amp;lt;UIElement&amp;gt;&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public static readonly DependencyProperty OpacityProperty = DependencyProperty.Register("Opacity", typeof(double ), typeof(BaseTargetedTriggerAction), new PropertyMetadata(0.5));&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public double Opacity&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (double )this.GetValue(BaseTriggerAction.OpacityProperty); }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this.SetValue(BaseTriggerAction.OpacityProperty, value); }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; protected override void Invoke(object parameter)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Target.Opacity=this.Opacity ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;La proprietà Target potrà essere impostata dopo aver associato il BaseTargetedTriggerAction ad un elemento selezionandolo tra i Behaviors disponibili nella Asset Library e trascinandolo sopra l’elemento sull’interfaccia con cui lo si vuole associare, ad esempio un bottone, come già visto sopre per gli altri esempi. Selezionando il Beheviors si prota impostare dalle proprietà anche il Target e all’esecuzione del Trigger (in questo caso il Click sul bottono a cui abbiamo associato il Behavior ) si eseguirà l’azione che imposterà l’Opacity sull’oggetto Target in base al valore della proprietà Opacity del Behaviors.&lt;/P&gt;
&lt;P&gt;Il meccanismo Trigger e Action permette di implementare soluzioni per molte esigenze di interazione sull’interfaccia, ma non soddisfa tutti i possibili scenari. Ad esempio nel caso in cui si voglia realizzare un Behaviors che consenta di impostare il comportamento di un oggetto per il Drag and Drop, occorre l’interazione di un modello Trigger-Action che non è limitato all’associazione di una coppia di questi due elementi, ma occorre la possibilità di costruire una combinazione di Trigger e Action per inserirle sempre in modo dichiarativo per ottenere questo tipo di comportamento. &lt;/P&gt;
&lt;P&gt;Proprio per questo motivo attraverso la derivazione dalla classe Behavior si possono sviluppare Behaviors che implementano azioni specifiche e renderle associabili anche in modo dichiarativo con lo XAML o attraverso Blend ad uno più specifici Trigger, senza definirne l’associazione in modo vincolante come negli esempi delle classi base viste in precedenza. &lt;/P&gt;
&lt;P&gt;Ad esempio implementando un Behaviors nel seguente modo, si consentirà un’enorme flessibilità nell’associare il comportamento a Triggers in modo completamente dichiarativo, fornendo la base per realizzare un’enorme flessibilità sia nello sviluppo delle interfacce che nella possibilità di personalizzazione del template dei controlli.&lt;/P&gt;
&lt;P&gt;Derivando dalla classe Behavior si può implementare le Action attraverso l’implementazione di un’interfaccia ICommand :&lt;/P&gt;
&lt;P&gt;public class BaseSampleBehavior : Behavior&amp;lt;DependencyObject&amp;gt;&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public BaseSampleBehavior()&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.BaseCommand = new ActionCommand(this.ExecCommand );&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; protected override void OnAttached()&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; base.OnAttached();&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; protected override void OnDetaching()&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.OnDetaching();&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; public ICommand BaseCommand&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; get;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; private set;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; private void ExecCommand()&lt;/P&gt;
&lt;P&gt;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("Behavior") ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Associato il Behaviors implementato con un elemento sull’interfaccia si può dalla finestra delle proprietà del Behaviors associare i Triggers che dovranno produrre l’esecuzione del Command. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image014_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image014_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image014 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image014_thumb.jpg" width=392 height=393 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/BehaviorsrenderelinterattivitsempliceinB_F346/clip_image014_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Attraverso questo pattern si possono così implementare Behaviors che permettano di gestire complesse interazioni in termini di Trigger e Action , consentendo anche la gestione di uno stato tra le diverse interazioni, fornendo un ottimo modello per la realizzazione di Behaviors che possano notevolmente semplificare lo sviluppo delle parte di interazione della interfaccia utente della nostra applicazione che dovranno produrre l’esecuzione del Command implementato, fornendo una grandissima flessibilità .&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9804841" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>RAINET Test Live Smooth Streaming in HD for Italian soccer team matches during Confederation Cup</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/06/22/rainet-test-live-smooth-streaming-in-hd-for-italian-soccer-team-matches-during-confederation-cup.aspx</link><pubDate>Mon, 22 Jun 2009 17:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9797701</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9797701.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9797701</wfw:commentRss><description>&lt;P&gt;How I have introduced in my &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/05/15/move-forward-internet-video-streaming-iis7-media-service-and-smooth-streaming.aspx" mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2009/05/15/move-forward-internet-video-streaming-iis7-media-service-and-smooth-streaming.aspx"&gt;previous post&lt;/A&gt; , Smooth Streaming is an innovative technology based on &lt;A href="http://www.iis.net/media" mce_href="http://www.iis.net/media"&gt;IIS Media Services&lt;/A&gt; and Silverlight, which the scope to simplify and make a reality delivering video content at high quality level through Internet up to true HD for Live and VOD. Using this technology &lt;B&gt;RAI.IT&lt;/B&gt;, the internet company of RAI, the Italian broadcast host of FIFA Confederations Cup South Africa 2009, in cooperation with &lt;B&gt;Microsoft Corp., &lt;A href="http://inlethd.com/" mce_href="http://inlethd.com/"&gt;Inlet Technologies&lt;/A&gt; and &lt;A href="http://www.level3.com/" mce_href="http://www.level3.com/"&gt;Level 3 Communications&lt;/A&gt;&lt;/B&gt;, offered exclusively for Italy (video content was geo-blocked to Italian IP) on &lt;B&gt;&lt;A href="http://www.raisport.rai.it/" mce_href="http://www.raisport.rai.it/"&gt;www.raisport.rai.it&lt;/A&gt;&lt;/B&gt; and &lt;A href="http://www.rai.tv/" mce_href="http://www.rai.tv/"&gt;www.rai.tv&lt;/A&gt; free, live Web broadcasting in high definition television quality (720p) of the Italian soccer team matches during the tournament. &lt;/P&gt;
&lt;P&gt;In the next picture an image of the player used during the streaming of the event:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image002_thumb.jpg" width=551 height=337 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;RAI.IT use already&amp;nbsp; Smooth Streaming &amp;nbsp;for VOD&amp;nbsp;on RAI TV portal (&lt;A href="http://www.rai.tv/" mce_href="http://www.rai.tv"&gt;http://www.rai.tv&lt;/A&gt;&amp;nbsp;)&amp;nbsp;&amp;nbsp; in the &lt;A href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=1" mce_href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=1"&gt;High Quality area&lt;/A&gt; (not in HD but to 480p) and now starts to adopt this technology for Live sports event.&lt;/P&gt;
&lt;P&gt;Smooth Streaming permit to solve one of the most significant limits in Internet video streaming connected to typical behaviors of the last mile for reproducing High Quality videos with high bitrates.&amp;nbsp; When we think to the way that the content is delivered to the client, we have a lot of parameter that change every second during the client reproduction. In particular bandwidth and CPU power availability conditions change every second and causing a video glitch and buffering during the reproduction of the content, especially for the content at high level of bitrates, generating a poor user experience.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image004_thumb.jpg" width=593 height=301 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;During the reproduction of the content Smooth Streaming dynamically detects current network and local PC conditions, and seamlessly switches the video quality of a media file that a Silverlight player receives. Consumers with high-bandwidth connections and newer hardware can experience HD quality streaming, and others with lower bandwidth speeds or older hardware receive an appropriate stream for their conditions, allowing the audience to enjoy an uninterrupted streaming experience with the highest quality possible.&lt;/P&gt;
&lt;P&gt;The original video source was acquired by specific encoders and transformed in a set of separated streams at different quality (one for different bitrates level) based on a contiguous sequence of 2 sec of video chunks, and an XML manifest with the metadata. These streams are published to the client through a set of servers based on IIS7 with &lt;A href="http://www.iis.net/media" mce_href="http://www.iis.net/media"&gt;IIS Media Services &lt;/A&gt;. In Live streaming all the streams are offered to the client via HTTP and archived automatically in a set of file in the storage of the origin servers. Archived files&amp;nbsp; are republished automatically to the client offering DVR capability to the client in addition to Live Stream offer. For the Confederation Cup matches RAI use the new beta version of IIS Media Services that support Live Streaming.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image006_thumb.jpg" width=575 height=349 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Video streaming is delivered to the client trough a sequence of HTTP call with REST style and for this reason it is possible leverage all the classic Internet HTTP Cache Infrastructure to increase streaming scalability. &lt;/P&gt;
&lt;P&gt;The client part of the Smooth Streaming based on Silverlight detects current network and local PC conditions, and seamlessly switches the video quality of a media adapting the experience at the actual conditions in the client permitting the best experience possible, eliminating buffer and glitch .&lt;/P&gt;
&lt;P&gt;The streaming starts with the first REST call from the client to the source and the response from the server with a manifest that describe chunks and streams level offered with the streaming. &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image008 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image008_thumb.jpg" width=608 height=328 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The client reads this information and in order to start the download of video chunks and initiate video reproduction requesting the chunk with a too low bitrates for first. &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image010_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image010_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image010 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image010_thumb.jpg" width=616 height=315 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image010_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;During the download of the first chunk, client code calculate the current bitrates and CPU conditions and in base at this information proceeds with requests of the others chunks, adapting continuously the bitrates of chunks requested.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image012_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image012_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image012 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image012_thumb.jpg" width=618 height=311 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image012_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As written before streaming works with a sequence of HTTP client requests with a REST style to a stateless server and this permit to insert the origin server behind a CDN with a classic HTTP Edge Caching, improving in a simple way the scalability of streaming. For the same reason all the intermediate http caching level (for example enterprise intermediate cache , etc ) can act automatically as a cache for our chunk and contributing to the scalability of our solution.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image014_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image014_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image014 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image014_thumb.jpg" width=644 height=340 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image014_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The client code can offer a lot of services leveraging the capability of the programming platform offered with Silverlight and can consume and presents a lot of contextual data and information with the video. The smooth streaming player element can send back to the server a lot of logging information can be captured using logging functionality of IIS Media Services. It is possible build to service that can permit start and stop of the event and services for control and limit bandwidth consumption from the client.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image016_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image016_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image016 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image016_thumb.jpg" width=640 height=322 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image016_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;In the client of RAI event we have start and stop control, bandwidth control and list highlights in the match that can permit to navigate and replay in the archive to the most important point of the event quickly. In this picture you can see the highlights box in overlay on the video in the player.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image018_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image018_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image018 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image018_thumb.jpg" width=548 height=337 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image018_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;highlights&amp;nbsp;future leveragin the fact that all the streams are&amp;nbsp;archived automatically in a set of file in the storage of the origin servers. Archived files&amp;nbsp; are republished automatically to the client offering DVR capability to the client .&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the case of RAI Confederation Cup streaming the architecture in place for the event is represented in the next picture :&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image020_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image020_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image020 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image020_thumb.jpg" width=629 height=405 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/RAINETTestLiveSmoothStreaminginHDforItal_EAAF/clip_image020_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The original HDTV 1080i signal in input is encoded in 7 different bitrates streams composed by a contiguous 2 secs video chunks codified in VC-1, created by 2 encoders &lt;I&gt;Spinnaker 7000&lt;/I&gt; from Inlet. Each encoder creates 3-4 streams and synch through the encoders are achieved with a timecode generator in input in the encoders with the source video. Encoders push the streams to an origin server farm in load balancing were the Level3 Communication CDN pull for distribute Live, archive streaming and XAP code and offers these to Silverlight client player published on RAI.IT and RAI.TV portal . &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9797701" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Media/default.aspx">Media</category></item><item><title>Download modulare con Silverlight</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/05/25/download-modulare-con-silverlight.aspx</link><pubDate>Mon, 25 May 2009 15:07:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9640409</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9640409.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9640409</wfw:commentRss><description>&lt;p&gt;L&amp;#8217;utilizzo di rich plugin su Internet e nelle intranet come strumento per lo sviluppo di interfacce client sta diventando sempre pi&amp;#249; frequente. L&amp;#8217;introduzione con Silverlight 2 dello sviluppo con .NET e la possibilit&amp;#224; di consumare e aggregare dati provenienti da Web Service in una interfaccia in cui si possono utilizzare controlli e databinding ha allargato le possibilit&amp;#224; di utilizzo anche a quelle classiche applicazioni Intranet di gestione dati. &lt;/p&gt;  &lt;p&gt;La crescita nelle potenzialit&amp;#224; utilizzabili per lo sviluppo e l&amp;#8217;impiego di Silverlight in applicazioni di maggiore complessit&amp;#224; e che implementano una notevole quantit&amp;#224; di funzionalit&amp;#224; e che in alcuni casi comportano in conseguenza un incremento nelle dimensioni del codice compilato che viene prodotto e che deve essere in conseguenza scaricato sul client. &lt;/p&gt;  &lt;p&gt;Con il tradizionale modello di deployment di Silverlight le componenti dell&amp;#8217;applicazione implementata vengono compilate in dll e racchiusi un file compresso che prende l&amp;#8217;estensione .xap che viene utilizzato come contenitore. L&amp;#8217;utilizzo dell&amp;#8217;applicazione &amp;#232; indicato nella pagina client attraverso lo specifico tag object che tra i parametri contiene l&amp;#8217;indicazione del file .xap contenente il codice compilato dell&amp;#8217;applicazione da eseguire che deve essere scaricato e utilizzato nel client.&lt;/p&gt;  &lt;p&gt;Il seguente esempio di tag illustra una tipica implementazione dell&amp;#8217;inserimento di un&amp;#8217;applicazione Silverlight con evidente l&amp;#8217;indicazione dello .xap contenente l&amp;#8217;applicazione:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;object data=&amp;quot;data:application/x-silverlight-2,&amp;quot; type=&amp;quot;application/x-silverlight-2&amp;quot; width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;source&amp;quot; value=&amp;quot;ClientBin/SilverlightComponent.xap&amp;quot;/&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;onerror&amp;quot; value=&amp;quot;onSilverlightError&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;background&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;minRuntimeVersion&amp;quot; value=&amp;quot;2.0.31005.0&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;autoUpgrade&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;a href=&amp;quot;http://go.microsoft.com/fwlink/?LinkID=124807&amp;quot; style=&amp;quot;text-decoration: none;&amp;quot;&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;img src=&amp;quot;http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot; alt=&amp;quot;Get Microsoft Silverlight&amp;quot; style=&amp;quot;border-style: none&amp;quot;/&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/a&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/object&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Nel caso di applicazioni pi&amp;#249; corpose i tempi di download del file e di avvio dell&amp;#8217;applicazione possono diventare significativi ed impattare in modo negativo sulla esperienza del&amp;#8217;&amp;#8217;utente nell&amp;#8217;utilizzo dell&amp;#8217;applicazione stessa. Ovviamente si pu&amp;#242; agire sui meccanismi di cache per ridurre al minimo le volte in cui all&amp;#8217;avvio dell&amp;#8217;applicazione la stessa sia scaricata nuovamente nel client. Con questo tipo di tecnica per il deployment per&amp;#242; , si riduce il problema , ma non si eliminano comunque i tempi necessari nei casi in cui a seguito di una modifica o all&amp;#8217;avvia su una nuova macchina dell&amp;#8217;applicazione deve essere scaricato l&amp;#8217;intero .xap.&lt;/p&gt;  &lt;p&gt;Per gestire questo tipo di situazioni &amp;#232; inoltre possibile utilizzare alcuni parametri che consentono di mostrare delle animazioni personalizzate durante lo scaricamento dello .xap. Attraverso il parametro splashscreensource del tag object utilizzato per istanziare nella pagina l&amp;#8217;applicazione &amp;#232; infatti possibile introdurre un file .xaml con una grafica personalizzata e ricevere con delle callback Java Script onSourceDownloadProgressChanged e onSourceDownloadComplete le informazioni sullo stato di avanzamento del download dello xap in maniera da permettere lo sviluppo di una interfaccia personalizzata, per gestire in modo pi&amp;#249; efficace la comunicazione versol&amp;#8217;utente durante il download dell&amp;#8217;applicazione.&lt;/p&gt;  &lt;p&gt;In particolare nel seguente tag abbiamo un esempio di come sia possibile configurare questa funzionalit&amp;#224;:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;object data=&amp;quot;data:application/x-silverlight-2,&amp;quot; type=&amp;quot;application/x-silverlight-2&amp;quot; width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;source&amp;quot; value=&amp;quot;ClientBin/SilverlightComponent.xap&amp;quot;/&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;onerror&amp;quot; value=&amp;quot;onSilverlightError&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;background&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;minRuntimeVersion&amp;quot; value=&amp;quot;2.0.31005.0&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;quot;autoUpgrade&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;#8221;splashscreensource&amp;#8221; value=&amp;#8221;SplashScreen.xaml&amp;#8221;/&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;#8221;onSourceDownloadProgressChanged&amp;#8221; value=&amp;#8221;onSourceDownloadProgressChanged&amp;#8221; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;param name=&amp;#8221;onSourceDownloadComplete&amp;#8221; value=&amp;#8221;onSourceDownloadProgressChanged&amp;#8221; /&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;a href=&amp;quot;http://go.microsoft.com/fwlink/?LinkID=124807&amp;quot; style=&amp;quot;text-decoration: none;&amp;quot;&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;img src=&amp;quot;http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot; alt=&amp;quot;Get Microsoft Silverlight&amp;quot; style=&amp;quot;border-style: none&amp;quot;/&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/a&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/object&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Attraverso il parametro splashscreensource ho impostato una grafica in xaml che Silverlight mostrer&amp;#224; durante il tempo di caricamento e attraverso le due callback provveder&amp;#242; a pilotare l&amp;#8217;aggiornamento dello stato di download dell&amp;#8217;interfaccia mostrata all&amp;#8217;utente durante il download.&lt;/p&gt;  &lt;p&gt;Ad esempio nel file splashscreen.xaml si potr&amp;#224; mostrare una grafica simile a quella riportata di seguito:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;Canvas     &lt;br /&gt;&amp;#160;&amp;#160; xmlns=&amp;#8221;&lt;/i&gt;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22"&gt;&lt;i&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;#8221;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;     &lt;br /&gt;&amp;#160;&amp;#160; xmlns:x=&amp;#8221;&lt;/i&gt;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml%22"&gt;&lt;i&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;#8221;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;     &lt;br /&gt;&amp;#160;&amp;#160; Width=&amp;#8221;550&amp;#8243; Height=&amp;#8221;550&amp;#8243;&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;Grid&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBlock Text=&amp;#8221;Loading: 0%&amp;#8221; x:Name=&amp;#8221;testo&amp;#8221;/&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Grid&amp;gt;      &lt;br /&gt;&amp;lt;/Canvas&amp;gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;E con le due seguenti funzioni si potr&amp;#224; cos&amp;#236; modificare il contenuto della interfaccia utente in base allo stato di avanzamento:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;function onSourceDownloadProgressChanged(sender, eventArgs)     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sender.findName(&amp;#8221;testo&amp;#8221;).Text =&amp;#160; &amp;#8220;Loading: &amp;#8221; + Math.round((eventArgs.progress * 1000)) / 10 + &amp;#8220;%&amp;#8221;;      &lt;br /&gt;}&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;function onSourceDownloadComplete(sender, eventArgs)     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sender.findName(&amp;#8221;testo&amp;#8221;).Text =&amp;#160; &amp;#8220;Completed&amp;#8221;;      &lt;br /&gt;}&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Questo tipo di tecnica consente di gestire in modo pi&amp;#249; efficace l&amp;#8217;interazione con l&amp;#8217;utente ma non elimina il tempo di attesa per quei casi in cui abbiamo applicazioni corpose che devono essere scaricate nel client.&lt;/p&gt;  &lt;p&gt;Oltre alla modalit&amp;#224; di deployment classica che abbiamo visto, Silverlight consente di effettuare il download ed il caricamento di componenti aggiuntive preparate in xap differenti durante l&amp;#8217;esecuzione dell&amp;#8217;applicazione. Questo consente di poter pensare la propria applicazione differenti componenti che verranno poi compilati ed inseriti in xap differenti. Il componente principale conterr&amp;#224; la parte di startup dell&amp;#8217;applicazione e sar&amp;#224; quello che verr&amp;#224; indicato nel tag source inserito nella pagina web. &lt;/p&gt;  &lt;p&gt;Durante l&amp;#8217;esecuzione di questo primo componente, verranno caricati su richiesta nel momento in cui occorrono per l&amp;#8217;esecuzione dell&amp;#8217;applicazione , le restanti componenti. &lt;/p&gt;  &lt;p&gt;Questo tipo di modello consente di scomporre l&amp;#8217;applicazione in componenti diverse modulando i tempi di caricamento ed avvio dell&amp;#8217;applicazione stessa.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/DownloadmodulareconSilverlight_C650/clip_image002_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/DownloadmodulareconSilverlight_C650/clip_image002_thumb.jpg" width="244" height="111" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Silverlight consente, infatti, di caricare a runtime componenti aggiuntive ed eseguirle. Lo scaricamento sul client del componente aggiuntivo pu&amp;#242; essere effettuato attraverso la classe WebClient . Terminato lo scaricamento si pu&amp;#242; estrarre l&amp;#8217;oggetto dallo xap o dalla dll scaricata utilizzando delle classi Assembly ed AssemblyPart.&lt;/p&gt;  &lt;p&gt;Nel seguente frammento di codice ho riportato un esempio di download e caricamento di un oggetto Silverlight da un componente esterno allo xap dell&amp;#8217;applicazione. Come primo passo si utilizza il WebClient per effettuare il download del componente satellite:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;WebClient client = new WebClient();&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;client.DownloadStringCompleted += &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;new DownloadStringCompletedEventHandler(OnDownloadCompleted);&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Uri uri = new Uri( &amp;#8230;url del componente satellite.. , UriKind.Relative);&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;client.DownloadStringAsync(uri);&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Sulla callback chiamata al termine del download si procede a creare un istanza dell&amp;#8217;oggetto e ad esempio aggiungerla come Child al contenitore dove dovr&amp;#224; essere visualizzata:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;void OnDownloadCompleted(object sender, DownloadStringCompletedEventArgs e)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;{&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;// caricamento dell&amp;#8217;assembly dallo XAP package dove e &amp;#232; l&amp;#8217;args della callback del web client&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;Assembly ass = GetAssemblyFromXap(nomeAssembly, e.Result);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;// Creazione istanza object&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;object component = ass.CreateInstance(className); &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;UserControl componentControl = component as UserControl;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;// Caricamento come child di un contenitore&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;contenitore.Children.Clear();&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;contenitore.Children.Add(componentControl); &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;}&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Assembly GetAssemblyFromXap(string assemblyName, Stream xap)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;{&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Uri assemblyUri = null;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;StreamResourceInfo resPackage = null;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;StreamResourceInfo resAssembly = null;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;AssemblyPart part = null;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;assemblyUri = new Uri(assemblyName, UriKind.Relative);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;resPackage = new StreamResourceInfo(xap, null);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;resAssembly = Application.GetResourceStream(resPackage, assemblyUri);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;//Estrae l&amp;#8217;assembly &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;part = new AssemblyPart();&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Assembly a = part.Load(resAssembly.Stream);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;return a; &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;}&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In modo similare &amp;#232; anche possibile scaricare ed visualizzare dei file xaml. In questo caso terminato lo scaricamento del file contenente lo xaml nella funzione di callback del webclient si pu&amp;#242;:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;void OnDownloadCompleted(object sender, DownloadStringCompletedEventArgs e)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;{&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;// Parsing e costruzione oggetti UI dallo XAML &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;string xaml = e.Result;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;UIElement uiObjects = XamlReader.Load(xaml) as UIElement;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;// Append to the DOM&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;contenitore.Children.Clear();&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;contenitore.Children.Add(uiObjects);&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;}&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Sfruttando questo tipo di funzionalit&amp;#224; disponibile per il deployment in SL diventa semplice scomporre in componenti l&amp;#8217;applicazione e permettere una migliore gestione del download delle risorse necessarie al funzionamento dell&amp;#8217;applicazione stessa implementando ad esempio pattern come il LazyLoad (&lt;a href="http://en.wikipedia.org/wiki/Lazy_loading"&gt;http://en.wikipedia.org/wiki/Lazy_loading&lt;/a&gt; ) per gestire il caricamento su richiesta delle componenti.&lt;/p&gt;  &lt;p&gt;Per poter gestire con pi&amp;#249; semplicit&amp;#224; il caricamento delle componenti e stabilire una semplice suddivisione della applicazione un possibile approccio consiste nell&amp;#8217;implementare i diversi componenti satellite come Sliverlight Control e nel gestire come Applicazione solo la componente principale che si occuper&amp;#224; di caricare il men&amp;#249; delle funzioni applicative e l&amp;#8217;infrastruttura di base utilizzata per la gestione dello stato e per il caricamento delle componenti che implementano le singole funzionalit&amp;#224;.&lt;/p&gt;  &lt;p&gt;Allo scopo di consentire anche un utilizzo trasparente del caricamento a richiesta delle componenti aggiuntive &amp;#232; utile sviluppare un controllo che consenta di rendere trasparente questa operazione rispetto allo sviluppo delle funzionalit&amp;#224; dell&amp;#8217;applicazione stessa.&lt;/p&gt;  &lt;p&gt;Ad esempio immaginando un&amp;#8217;applicazione che presenta un men&amp;#249; di funzionalit&amp;#224; ciascuna implementata attraverso una delle componenti satellite, pu&amp;#242; essere utile implementare un controllo da inserire nello UserControl principale dell&amp;#8217;applicazione che attraverso la semplice modifica di alcuni parametri , provveda automaticamente a caricare ed eseguire, inserendo nello spazio in cui il controllo e inserito nell&amp;#8217; applicazione principale , gli elementi del componente satellite impostati sulle propriet&amp;#224; . Ad esempio nel seguente frammento di xaml abbiamo una Grid con all&amp;#8217;interno il controllo con le propriet&amp;#224; impostate all&amp;#8217;interno del quale verr&amp;#224; visualizzato lo UserControl TestComponente, estratto dallo xap TestComponente:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;StackPanel Grid.Row=&amp;quot;1&amp;quot; x:Name=&amp;quot;contenitore&amp;quot;&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;c:ComponentLoaderControl&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;c:ComponentLoaderControl.ComponentInfo&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;c:ComponentInfo ComponentXapUrl=&amp;quot;TestComponent.xap&amp;quot; ComponentAssembly=&amp;quot;TestComponent.dll&amp;quot; ComponentControl=&amp;quot;TestComponent.Page&amp;quot; /&amp;gt; &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/c:ComponentLoaderControl.ComponentInfo&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/c:ComponentLoaderControl&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/StackPanel&amp;gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Un controllo di questo genere oltre a gestire con semplicit&amp;#224; il meccanismo di Download e caricamento dei componenti aggiuntivi, potrebbe occuparsi di gestire sia gli eventuali errori di download o caricamento del componente aggiuntivo sia i feedback verso l&amp;#8217;utente relativi agli errori e alla grafica necessaria a comunicare lo stato di download del componente aggiuntivo.&lt;/p&gt;  &lt;p&gt;Un controllo di questo tipo potrebbe essere implementato attraverso un customcontrol di Silverlight in maniera da ottenere un componente facilmente riutilizzabile in pi&amp;#249; applicazioni.&lt;/p&gt;  &lt;p&gt;Come esempio ho realizzato un prototipo di customcontrol che implementa questa funzionalit&amp;#224; da utilizzare come base per realizzare un componente di questo tipo nelle vostre applicazioni e che potete scaricare da &lt;a href="http://cid-d82de3153feb12ed.skydrive.live.com/self.aspx/Public/SilverlightDownload/SilverlightComponent.zip"&gt;qui&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9640409" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Move Forward Internet video streaming: IIS7 Media Service and Smooth Streaming</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2009/05/15/move-forward-internet-video-streaming-iis7-media-service-and-smooth-streaming.aspx</link><pubDate>Fri, 15 May 2009 13:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9618308</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/9618308.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=9618308</wfw:commentRss><description>&lt;P&gt;Delivering video content through Internet is one of the hottest technical topics. The increase of bandwidth and connectivity in combination with the numbers from the last big video event delivered like Olympics, demonstrate the potential of Internet channel for this type of content. In the 2008 Summer Olympics Games in Beijing, NBCOlympics.com attracted close to 6½ million users daily, who, on average, stayed more than 13 minutes per visit and spent more than 27 minutes when consuming video. In total, users watched more than 6 million hours of video content or 60 million video streams, which represent a 5-fold and 20-fold increase compared to the Torino and Athens games combined. Another big difference that the last Olympic on line demonstrate it is relative, not only to the number of users, but also to the viewing time. In the past, online video consumption was limited to “snippets” of video, now the prolonged viewing indicates that users enjoy the experience and find the image and sound quality acceptable. &lt;/P&gt;
&lt;P&gt;Worldwide, billions of videos are viewed online every month. This type of trend are confirmed to a lot of service that came up on the market with success in the previous months like BSKYB channels offering or the new version of Netflix service and many others.&lt;/P&gt;
&lt;P&gt;Setting up an online video service was a complex undertaking and fraught with difficulties, and the process of preparing, loading, and delivering multimedia content, combined with the serving of appropriate advertising, required a lot of manual work and did not really scale very well. In particular “delivering” video content at good or high level of quality through Internet connection is not a simple thing. A lot of details and technical issues are involved on this and build a solution for this and monetize the result is really complex.&lt;/P&gt;
&lt;P&gt;In the last NAB conference Microsoft announce a first Release of new technology called Smooth Streaming based on &lt;A href="http://www.iis.net/media" target=_blank mce_href="http://www.iis.net/media"&gt;IIS7 Media Services&lt;/A&gt; and Silverlight, which the scope to simplify and make a reality delivering video content at high quality level through Internet up to true HD for Live and VOD. You can see&amp;nbsp; &lt;A href="http://www.smoothhd.com/" mce_href="http://www.smoothhd.com"&gt;this web site from akamai &lt;/A&gt;an example of HD content delivered with smooth streaming and &lt;A href="http://www.iis.net/media" mce_href="http://www.iis.net/media"&gt;at this website&lt;/A&gt; you can found others technical information about this technology.&lt;/P&gt;
&lt;P&gt;In the previous months before this announcement I had the opportunity to test and build a real production environment based on this technology, inside a new Web TV portal of RAI – Radio Televisione Italiana ( &lt;A href="http://www.rai.tv/" mce_href="http://www.rai.tv"&gt;http://www.rai.tv&lt;/A&gt; ) . In the new version of this web site recently released there is a new area based on this smooth streaming technology with &lt;A href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=1" mce_href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=1"&gt;fiction&lt;/A&gt;, &lt;A href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=2" mce_href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=2"&gt;sport&lt;/A&gt; and &lt;A href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=3" mce_href="http://www.rai.it/dl/RaiTV/hd/raitvhd.html?v=3"&gt;junior&lt;/A&gt; videos. Content from RAI website have a good quality but is not HD content because the original produced video&amp;nbsp; is not HD. Based on this experience I want write some post on this new fantastic technology that can permit to deliver uninterrupted video streaming to Silverlight clients at High Quality, via HTTP in VOD and delivers massively scalable Smooth Streaming for live events.&lt;/P&gt;
&lt;P&gt;Smooth Streaming&amp;nbsp; permit to solve one of the most significant limits in Internet video streaming connected to typical behaviors of the last mile for reproducing High Quality videos with high bitrates.&amp;nbsp; When we think to the way that the content is delivered to the client, we have a lot of parameter that change every second during the client reproduction. In particular bandwidth and CPU power availability conditions change every second and causing a video glitch and buffering during the reproduction of the content, especially for the content at high level of bitrates, generating a poor user experience .&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image002_thumb.jpg" width=677 height=340 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Before to go in deep in Smooth Streaming technology and in order to explain difference and advantage that come with this new streaming technique I want recap the typical way used to delivery video content through Internet. Before the smooth streaming you can use essentially two different way for delivering video content:&lt;/P&gt;
&lt;P&gt;- Progressive Download&lt;/P&gt;
&lt;P&gt;- Traditional Streaming (RTSP, streaming through HTTP, RTMP, etc)&lt;/P&gt;
&lt;P&gt;Both approaches have pros and cons and smooth streaming try to combine the best of the previous techniques. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;When you use Progressive Download to delivery video content&lt;/B&gt; you essentially leverage the capability of Web Server to delivery file. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image004_thumb.jpg" width=738 height=304 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The Web Server receive a request for a specific URL for the video content and the web server start to deliver the file to the client via classic HTTP. &lt;/P&gt;
&lt;P&gt;Big advantages of this solution are:&lt;/P&gt;
&lt;P&gt;- simplicity of the approach ;&lt;/P&gt;
&lt;P&gt;- not required a specialized server;&lt;/P&gt;
&lt;P&gt;- leveraging all HTTP infrastructure in terms of caching and distribution.&lt;/P&gt;
&lt;P&gt;Problems connected to this solution are:&lt;/P&gt;
&lt;P&gt;- Bandwidth controls;&lt;/P&gt;
&lt;P&gt;- Security of content;&lt;/P&gt;
&lt;P&gt;- Limited user tracking;&lt;/P&gt;
&lt;P&gt;- Poor user experience (no seeking feature on classic web server);&lt;/P&gt;
&lt;P&gt;- VOD video content only.&lt;/P&gt;
&lt;P&gt;In general the most significant problem of this approach is about bandwidth consumption. In fact the web server delivers the video content to the cache of the client without any type of control or limitation leveraging all the bandwidth available.&lt;/P&gt;
&lt;P&gt;You can improve efficiency of progressive download through system that can permit the control of bandwidth and offering control and seeking capabilities. IIS7 Media Services enabled this feature too called &lt;A href="http://www.iis.net/extensions/BitRateThrottling" mce_href="http://www.iis.net/extensions/BitRateThrottling"&gt;Intelligent bit rate throttling&lt;/A&gt;. This feature is available for the most used type of media content, and permit to reduce bandwidth consumption saves money on network costs by metering the download speed of multiple media file types as well as data. Intelligent Bit Rate Throttling accomplishes this by automatically detecting the encoded bit rates of 11 common media formats, such as Windows Media Video (WMV), Flash Video (FLV), and MPEG 4 (MP4), and then throttling the response to the client. Bit Rate Throttling and allows administrators to configure throttling rules for all file and MIME types.&lt;/P&gt;
&lt;P&gt;With this technique you could obtain more efficiency for bandwidth consumption and simplicity in the delivery but remaining a lot of limitations. For example, in the case of the user put in pause the reproduction the download proceeds consuming bandwidth; in this way we can use of a single bitrates for reproduction or complex variable bitrates technique with poor efficiency , and remaining the problem illustrated before about the last mile and client reproduction, in particular for content with high quality and consequent high bitrates.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;When you use classical streaming&lt;/B&gt; you use a specialized server to delivery to the client only the portion of the stream involved in the reproduction of the video in base of the command received from the client.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image006_thumb.jpg" width=790 height=315 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Big advantages of this solution are:&lt;/P&gt;
&lt;P&gt;- Efficiency in control and delivery of content ;&lt;/P&gt;
&lt;P&gt;- Simple way to track user activity;&lt;/P&gt;
&lt;P&gt;- Good user experience (seeking, forward, etc);&lt;/P&gt;
&lt;P&gt;- Good for VOD and Live .&lt;/P&gt;
&lt;P&gt;Problems connected to this solution are:&lt;/P&gt;
&lt;P&gt;- Required specialized services ;&lt;/P&gt;
&lt;P&gt;- Not cache in HTTP CDN;&lt;/P&gt;
&lt;P&gt;- Scalability required a specialized network .&lt;/P&gt;
&lt;P&gt;In general the most significant problem of this approach is about scalability. In order have a large distribution of video content is necessary achieve a specialized infrastructure of server with a specific streaming services. Is not possible reuse the big cache infrastructure that we have in place on Internet today for HTTP . In order to delivery this type streaming, Windows Server offers a good platform through the &lt;A href="http://www.microsoft.com/windows/windowsmedia/forpros/serve/prodinfo2008.aspx" mce_href="http://www.microsoft.com/windows/windowsmedia/forpros/serve/prodinfo2008.aspx"&gt;Windows Media Services&lt;/A&gt; today available for Windows Server 2008.&lt;/P&gt;
&lt;P&gt;When you use Smooth Streaming now available in beta with &lt;A href="http://www.iis.net/media" mce_href="http://www.iis.net/media"&gt;IIS7 Media Services&lt;/A&gt; , you have the capability to deliver media at variables bit rates to Silverlight clients over HTTP combining the advantage of streaming and progressive download and adding capability of adapt the bit rates at the real situation in the last mile in terms of bandwidth and CPU.&lt;/P&gt;
&lt;P&gt;With the Smooth Streaming you deliver video content starting from a set of specific encoded file with different bit rates level. During the encoding phase, realizable today for VOD (with Expression Encoder 2 SP1 with adaptive streaming encoding profile) or for live using a specialized encoder from an encoders vendor, you obtain the source files to stream. You can choose a set of different bitrates and obtaining a set of N file one for every level of bit rates that you have selected in the profile and a xml manifest with the metadata for server and an xml file for client. You can choose at maximum of 10 different bit rates. The manifest files are used from the server and from the client to understand level of bitrates available for streaming and others information relative to the media content. &lt;/P&gt;
&lt;P&gt;A typical Smooth Streaming media asset (presentation) consists of the following files: &lt;/P&gt;
&lt;P&gt;MP4 files containing video/audio &lt;/P&gt;
&lt;P&gt;- &lt;B&gt;*.ismv &lt;/B&gt;Contains video and audio, or only video (one file ISMV file per encoded video bit rate )&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;*.isma &lt;/B&gt;Contains only audio &lt;/P&gt;
&lt;P&gt;Server manifest file &lt;/P&gt;
&lt;P&gt;- &lt;B&gt;*.ism -&lt;/B&gt;Describes the relationships between the media tracks, bit rates and files on disk . Used by IIS Media Services Server&lt;/P&gt;
&lt;P&gt;Client manifest file &lt;/P&gt;
&lt;P&gt;- &lt;B&gt;*.ismc - &lt;/B&gt;first file delivered to the client. Describes the available streams to the client: bitrates level available, codecs used, video resolutions, markers, captions, etc. &lt;/P&gt;
&lt;P&gt;For live streaming the same structure is created in the archive of event and client manifest is generated at runtime from encoding available. Origin Media Server can archive all live streaming and offer DVR capability to the client.&lt;/P&gt;
&lt;P&gt;In every video\audio file (ismv , isma) you have a contiguous sequence of video chunks at fixed time length (default 2 sec) based on the ISO/IEC 14496-12 ISO Base Media File Format specification, better known as the MP4 file specification . There are actually two parts to the Smooth Streaming format: the wire format, and the disk file format. In Smooth Streaming, a video is recorded in full length to the disk as a single file (one file per encoded bit rate), but it's transferred to the client as a series of small file chunks. The wire format defines the structure of the chunks that are sent by IIS to the client, whereas the file format defines the structure of the contiguous file on disk, enabling better file management. The MP4 specification is perfect for this because allows MP4 to be internally organized as a series of fragments, which means that in Smooth Streaming the wire format is a direct subset of the file format. Every fragment is delivered to the client through HTTP and in this way can be leverage all the HTTP caching infrastructure of Internet.&lt;/P&gt;
&lt;P&gt;For VOD and for Live the content are published through IIS Media Service using Windows Server 2008 and IIS7 with IIS Media services Extensions. &lt;/P&gt;
&lt;P&gt;During the delivery of the content, the client, in order to reproduce the video, sends a set of specific requests to the server to download the video and audio chunks. In every request for a single chunk, the client specifies level of bit rates and timeframe required in base of the current condition of bandwidth and CPU and position in content reproduction. In this way smooth streaming is delivered with a set of progressive download of video and audio chunks. &lt;/P&gt;
&lt;P&gt;The client send a set of HTTP GET request in REST style like this : &lt;I&gt;http://smoothstreaming.com/title.ism/QualityLevels(1775000)/Fragments(video=840000000) &lt;/I&gt;that contains information about bit rates and timeframe requested for the chunk . This type of request is a typical HTTP request and is it possible leverage all the http infrastructure on Internet in order to cache this content to near as possible at the client and using a typical http edge offered from a CDN. &lt;/P&gt;
&lt;P&gt;A specific part of code downloaded in the client contains the Heuristic Algorithms that drive the requests of chunks. The process start with the base request from the client at the client manifest file on the server in order to obtain the metadata that can guide the behavior of the client. This request have this format : &lt;I&gt;http://smoothstreaming.com/title.ism/Manifest&lt;/I&gt;, IIS receive the request send manifest client in response. In the next picture you can see a typical client manifest response with the indication of the bit rates available for the content downloads.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image008 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image008_thumb.jpg" width=779 height=369 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The client manifest can contains more information about media metadata like : codecs, Text streams, Multi-language audio tracks, Alternate video and audio tracks (for example, multiple camera angles, director's commentary, etc.), Multiple hardware profiles (for example, a bit rate targeted at different playback devices) , Script commands, markers/chapters, captions &lt;/P&gt;
&lt;P&gt;The process continue with the request of the first chunk video and audio, requested with the low bit rates available in the manifest with a REST style call described before . The IIS Media Service Module receive the request and use a server manifest file to determine the file to load in base of the request bitrates and provides to the right chunk of video. In the next picture you can see a sample of server manifest file with the indication of file for bitrates:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image010_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image010_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=clip_image010 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image010_thumb.jpg" width=545 height=387 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/MoveForwardInternetvideostreamingIIS7Med_B10B/clip_image010_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;For the successive request based on download speed, the client can detect available bandwidth and requesting the right bit rates in base of the current situation of bandwidth and CPU. In this way the smooth streaming have the capability of adapt continuously creating an immersive User Experience. The process Work in a similar way for Live and VOD streaming and during the delivery of the video chunk through Internet, all the HTTP caching infrastructure of the network can be leverage in order to improve scalability in particular for Live Streaming. In the case of Live Smooth Streaming the Origin media server can archive the content produced from the encoder and offering DVR capability too during the Live Streaming. &lt;/P&gt;
&lt;P&gt;There is a lot of advantage in this approach respect to traditional streaming technique. In traditional streaming, the client state is managed both by the client and the server. The server keeps a record of each client for things such as playback state, streaming position, selected bit rate (if multiple bit rates are supported), etc. While this gives the streaming server more control, it also adds overhead to the server. In terms of scalability another important limitation is about the fact that each client has to maintain the server affinity throughout the streaming session. &lt;/P&gt;
&lt;P&gt;With the pull model in VOD or Live Smooth Streaming, the server is stateless, the client drive the process and has the responsibility for the state and this fact increase scalability and remove any single point of failure. Any client request can be satisfied by any server configured and the network topology can leverage a stateless infrastructure and can reroute the client requests to the best server. In this way we have a big improvement in:&lt;/P&gt;
&lt;P&gt;- quality because all the decisions, resulting in a much faster response (for example bit rate switching) offering a superior UX :&lt;/P&gt;
&lt;P&gt;- reproduction start fast because the client select the low bitrates and can download in parallel more chunks, potentially cached from the most near web server &lt;/P&gt;
&lt;P&gt;- bitrates are continuously adapted at the real situation in the last mile in terms of bandwidth and CPU status&lt;/P&gt;
&lt;P&gt;- requests can be served from different servers without affinity or persistent connection improving scalability and fault-tolerance&lt;/P&gt;
&lt;P&gt;- scalability because you can leverage a simple, efficient and load balanced HTTP infrastructure to deliver video content&lt;/P&gt;
&lt;P&gt;- cost because you can leverage an HTTP CDN with generic web server with low number of specialized server and leverage all the HTTP cache ( for example intermediate proxy )&lt;/P&gt;
&lt;P&gt;Al the URL obfuscation technique can be used to protect the content and is announce the support of Playready content protection encryption in order to protect smooth streaming for Live and for VOD.&lt;/P&gt;
&lt;P&gt;Smooth streaming enable a new video delivery mechanism that can permit to stream HD content in VOD and Live through Internet with a cool UX . &lt;/P&gt;
&lt;P&gt;In next posts we can see in more details the three phase for create and publish content with this technology .&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9618308" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Media/default.aspx">Media</category></item><item><title>Yoox dal retail alla piattaforma multibrand per e-commerce</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/06/16/yoox-dal-retail-alla-piattaforma-multibrand-per-e-commerce.aspx</link><pubDate>Mon, 16 Jun 2008 10:30:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8592977</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8592977.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8592977</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 7px 0px 0px; border-left: 0px; border-bottom: 0px" height="216" alt="image" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/image_thumb.png" width="260" align="left" border="0" /&gt;&lt;/a&gt; Una delle attivit&amp;#224; pi&amp;#249; interessanti che mi &amp;#232; capitato di seguire negli ultimi mesi &amp;#232; collegata alla revisione architetturale che Yoox Group ha avviato sui suoi servizi e siti Internet.&lt;/p&gt;  &lt;p&gt;YOOX Group &amp;#232; il partner globale di Internet retail per i principali brand di moda &amp;amp; design: l&amp;#8217;unica azienda di retail su Internet sia multimarca &amp;#8211; con la boutique virtuale &lt;a href="http://yoox.com/"&gt;YOOX.COM&lt;/a&gt;, sia monomarca &amp;#8211; con i flagship store online sviluppati da YOOX Services.&lt;/p&gt;  &lt;p&gt;Nato nel 2000 ha avviato un nuovo modello di business con la boutique virtuale N&amp;#176; 1 al mondo &lt;a href="http://yoox.com/"&gt;YOOX.COM&lt;/a&gt;, che ha contribuito pionieristicamente a creare lo shopping di moda online nel nostro Paese. &lt;/p&gt;  &lt;p&gt;L&amp;#8217;infrastruttura globale sincronizzata su tre continenti, insieme all&amp;#8217;esperienza accumulata in questi anni, hanno portato all&amp;#8217;apertura nel 2006 di YOOX Services, societ&amp;#224; di YOOX Group che progetta e gestisce gli online store per conto dei principali brand di moda &amp;amp; design. YOOX Services realizza i flagship store dei principali brand della moda &amp;amp; design che intendono offrire online la stessa collezione disponibile attualmente nei negozi. &lt;/p&gt;  &lt;p&gt;Attualmente i flagship store online monomarca &amp;#8220;powered by YOOX&amp;#8221; sono: &lt;a href="http://www.marni.com"&gt;www.marni.com&lt;/a&gt;, &lt;a href="http://www.emporioarmani.com/"&gt;www.emporioarmani.com&lt;/a&gt;, &lt;a href="http://www.diesel.com/"&gt;www.diesel.com&lt;/a&gt;, &lt;a href="http://www.cpcompany.com/"&gt;www.cpcompany.com&lt;/a&gt;, &lt;a href="http://www.stoneisland.com/"&gt;www.stoneisland.com&lt;/a&gt; e presto saranno annunciati molti altri virtual store dei principali brand del lusso. &lt;/p&gt;  &lt;p&gt;A questi si &amp;#232; aggiunto il nuovissimo &lt;a href="http://thecorner.com/"&gt;THECORNER.COM&lt;/a&gt; &amp;#8220;powered by YOOX&amp;#8221;, un department store online completamente dedicato alle nuove collezioni di designer internazionali &amp;#8221;cutting edge&amp;#8221; e a brand italiani di ricerca ognuno con un &amp;#8220;corner&amp;#8221; dedicato.&lt;/p&gt;  &lt;p&gt;Una case history di successo se guardiamo i numeri di YOOX.COM: un sito localizzato in 7 lingue con pi&amp;#249; di quattro milioni di visitatori al mese e pi&amp;#249; di un milione di capi consegnati in tutto il mondo nel 2007 in 53 paesi. &lt;/p&gt;  &lt;p&gt;Dal punto di vista tecnico la necessit&amp;#224; di dover passare da un singolo Internet retailer ad una nuova serie di siti monobrand ha comportato la necessit&amp;#224; di una profonda revisione dell&amp;#8217;architettura su cui yoox services implementa le soluzioni Internet. I piani di Yoox Group, infatti, prevedono lo sviluppo di un numero significativo di siti monbrand o specialistici e pertanto la nuova piattaforma tecnologica per Yoox Service dovr&amp;#224; prevedere la possibilit&amp;#224; di implementare e gestire con sempre maggiore velocit&amp;#224; nuove tipologie di siti. &lt;/p&gt;  &lt;p&gt;Dal punto di vista architetturale Yoox Services si &amp;#232; trovata di fronte all&amp;#8217;esigenza di muovere la propria soluzione per yoox.com da un sito di e-commerce ad una vera e propria piattaforma che possa permettere la costruzione e la gestione di &amp;#8220;n&amp;#8221; siti, mettendo a fattor comune un insieme di servizi di base con lo scopo di semplificare lo sviluppo , manutenzione e sfruttamento dell&amp;#8217;hardware, ma permettendo al tempo stesso il necessario isolamento tra i siti, la flessibilit&amp;#224; per gli elementi di interfaccia utente e la costruzione dei contenuti di ciascuno store virtuale, garantendo allo stesso tempo la necessaria scalabilit&amp;#224; rispetto al volume di richieste gi&amp;#224; oggi elevato sul solo Yoox.com.&lt;/p&gt;  &lt;p&gt;Per rispondere a queste esigenze Yoox Group ha quindi avviato uno studio per l&amp;#8217;implementazione di una nuova piattaforma che viene da identificata con il termine OSS (ONLINE STORE SERVICES) per rispondere alle nuove esigenze del gruppo e garantire gli stessi livelli di qualit&amp;#224; , scalabilit&amp;#224; e costi offerti dalla soluzione che ha contribuito in modo determinate al successo di Yoox.com.&lt;/p&gt;  &lt;p&gt;La nuova architettura &amp;#232; divisa in due componenti fondamentali: una componenti di front-end che si preoccupa di gestire acquisizione di ordini e gestione del sito (catalogo, profili, carrello, pagamenti, etc) ed una componente di back-end che riceve gli ordini attraverso un un meccanismo di code asincrone dove attraverso Microsoft BizTalk e Microsoft Navision vengono gestite le interazioni con i partner , le operazioni logistiche di spedizione e la fatturazione. &lt;/p&gt;  &lt;p&gt;La componente di front-end prevede una parte di user interface (UI) , una serie di Web Service per erogazione di servizi a siti terzi (ad esempio il catalogo) ed alle componenti lato client della UI (JS AJAX, FLASH, SILVERLIGHT, WPF\.NET) , una parte di servizi con la logica delle operazioni del sito e uno storage per i dati.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image004_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="268" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image004_thumb.jpg" width="357" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I principi architetturali che guidano il rifacimento della componente di front-end che si &amp;#232; deciso di seguire per l&amp;#8217;evoluzione dal mono sito a multi sito possono essere rappresentati come indicato nella seguente figura:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image006_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="367" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image006_thumb.jpg" width="386" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;L&amp;#8217;idea guida di base &amp;#232; quella di passare da un&amp;#8217;architettura single-tenant dove ciascuna istanza dei siti &amp;#232; implementata con una singola soluzione adhoc\custom ,ad una piattaforma che ricalchi la struttura di base dei servizi offerti attualmente in yoox.com, fornendoli con una architettura multi-tenant scalabile e configurabile. I principi architetturali impostati partono dalle idee impostate per le architetture SaaS e quindi gran parte delle impostazioni sulle architetture multi-tenant indicate ottimo &lt;a href="http://msdn.microsoft.com/en-us/architecture/aa479069.aspx"&gt;documento di Carraro e Chong&lt;/a&gt; sull&amp;#8217;argomento, ma vengono riadattati alle forti esigenze di flessibilit&amp;#224; sugli aspetti di personalizzazione del front-end ed di gestione dei contenuti dello stesso necessari ad una applicazione di questo tipo.&lt;/p&gt;  &lt;p&gt;Dal punto di vista tecnologico nell&amp;#8217;implementazione della nuova architettura in corso di sviluppo Yoox ha scelto di utilizzare nelle componenti fondamentali la piattaforma Microsoft: Windows Server 2008 con IIS7 come piattaforma Web Server, SQL Server 2008 come storage e .NET 3.5 come framework di sviluppo con Visual Studio Team System e Team Foundation Server per l&amp;#8217;implementazione della software factory, Navision e Microsoft BizTalk Server nelle componenti di back-end.&lt;/p&gt;  &lt;p&gt;Ulteriore vincolo per la nuova architettura consiste nella necessit&amp;#224; di migrare per step successivi anche il sito principale yoox.com e di garantire,quindi, una completa continuit&amp;#224; di funzionamento. Proprio per questo motivo la migrazione dalla precedente architettura single-tenant basata su ASP/COM sta procedendo per step che prevedono come prima parte la costruzione dei nuovi servizi e l&amp;#8217;aggancio di questi alla attuale interfaccia. Terminata la costruzione dei nuovi servizi, verr&amp;#224; anche migrata la tecnologia utilizzata per la parte di interfaccia utente.&lt;/p&gt;  &lt;p&gt;Data la particolarit&amp;#224; della natura dei siti, infatti , la profonda necessit&amp;#224; di personalizzazione delle componenti di UI &amp;#232; una delle caratteristiche che a spinto Yoox alla decisione di mantenere quest&amp;#8217;ultimo aspetto sviluppato ad hoc per ogni tenant. In particolare , oltre alla classica interfaccia HTML sono previste anche interfacce di tipo differente tra cui piccoli smart client residenti sul desktop che offriranno agli utenti la possibilit&amp;#224; di un interazione pi&amp;#249; semplice con il catalogo del sito. Anche le componenti di UI di gestione del sito sono costruite con interfacce smart client.&lt;/p&gt;  &lt;p&gt;L&amp;#8217;architettura principale del nuovo front-end multi sito di YOOX pu&amp;#242; quindi essere rappresentata come di seguito:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image008_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="306" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image008_thumb.jpg" width="376" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Le interfacce utente di ciascun tenant\sito accedono ai sevizi forniti dal OSS fornendo sempre un parametro che identifica il tenant stesso e ottenendo in questo modo l&amp;#8217;accesso alla logica ed ai dati necessari al funzionamento della specifica istanza. Con questo tipo di approccio, ciascun elemento applicativo pu&amp;#242; scalare con un approccio orizzontale che comporta la semplice aggiunta di macchine fisiche o virtuali all&amp;#8217;architettura su tutti gli strati applicativi , compresa la parte di dati. Anche a questo livello, infatti, viene utilizzato un partizionamento dei dati rispetto alle istanze che identificano i tenant . Questo approccio consente di suddividere i dati in differenti database che possono anche essere ospitati su macchine fisiche o virtuali diverse in funzione delle esigenze di scalabilita. Lo strato di accesso ai dati dei servizi conterr&amp;#224; la logica necessaria ad individuare la partizione corretta in base all&amp;#8217;identificativo del tenant\ sito fornito dal chiamante :&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image010_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="384" alt="clip_image010" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image010_thumb.jpg" width="518" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Per un chiarimento sul tema del partizionamento dei dati vi rimando ai post fatti in passato sull argomento la scalabilit&amp;#224; ed il partizionamento in entit&amp;#224; parte 1 e parte 2 . Il disaccoppiamento tra front-end e back-end attraverso l&amp;#8217;utilizzo di una coda fa si che il carico prodotto nell&amp;#8217;inserimento di ordini o dalla navigazione degli utenti, non si rifletta direttamente sulle componenti che gestiscono le fasi di fatturazione e gestione logistica e di spedizione.&lt;/p&gt;  &lt;p&gt;I servizi sono sviluppati con tre differenti interfacce per permettere sia l&amp;#8217;interazione con le pagine ASP (COM), sia l&amp;#8217;interazione con componenti .NET in process , sia una interfaccia REST con XML o JSON . In questo modo ciascun servizio pu&amp;#242; o essere direttamente posizionato sulle macchine di front-end per essere consumato da UI HTML o per poter essere eventualmente esposto verso altre applicazioni ad estensione delle potenzialit&amp;#224; della piattaforma stessa. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image012_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="351" alt="clip_image012" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image012_thumb.jpg" width="450" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La maggior parte dei servizi utilizza WCF (Windows Communication Foundation) per esporre una parte delle interfacce di accesso e nello strato di accesso ai dati sfruttano le nuove funzionalit&amp;#224; offerte da LINQ.&lt;/p&gt;  &lt;p&gt;La struttura complessiva del sito pu&amp;#242; essere quindi rappresentata come di seguito:&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image014_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="344" alt="clip_image014" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/ad51ccc86a33_B7B8/clip_image014_thumb.jpg" width="462" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8592977" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/ORM/default.aspx">ORM</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/BPM/default.aspx">BPM</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Smart+Client/default.aspx">Smart Client</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/IIS7/default.aspx">IIS7</category></item><item><title>Evento The Next Web Now: Online i video delle sessioni per developer</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/05/20/evento-the-next-web-now-online-i-video-delle-sessioni-per-developer.aspx</link><pubDate>Tue, 20 May 2008 11:21:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8522109</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8522109.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8522109</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/italy/eventi/mix/agenda_dev.mspx" target="_blank"&gt;&lt;img style="margin: 0px 5px 0px 0px" height="86" alt="clip_image003" src="http://blogs.msdn.com/blogfiles/italy/WindowsLiveWriter/TheNextWebNowMIXEssentials23AprileaMilan_918B/clip_image003_3.jpg" width="282" align="left" border="0" /&gt;&lt;/a&gt;Sono &lt;a href="http://www.microsoft.com/italy/eventi/mix/agenda_dev.mspx"&gt;online le&amp;#160; sessioni dell'evento The Web Next Now&lt;/a&gt; tra cui la mia sessione &amp;quot;Costruire Rich Internet Applications con Microsoft Silverlight 2&amp;quot; . Per le slide trovate i link nel seguente &lt;a href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/04/24/evento-the-next-web-now-slide-sessione-costruire-applicazione-ria-con-silverlight-2.aspx"&gt;post&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8522109" width="1" height="1"&gt;</description></item><item><title>Silverlight e le nuove applicazioni RIA: Servizi per l'Healthcare</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/05/08/silverlight-e-le-nuove-applicazioni-ria-servizi-per-l-healthcare.aspx</link><pubDate>Thu, 08 May 2008 15:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8470221</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8470221.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8470221</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001%5B3%5D.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001%5B3%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 0px 5px 0px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=256 alt=clip_image001[3] src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001%5B3%5D_thumb.jpg" width=339 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001%5B3%5D_thumb.jpg"&gt;&lt;/A&gt;Nelle scorse settimane&amp;nbsp; ho fatto un &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/16/silverlight-e-le-nuove-interfacce-per-i-servizi-finanziari.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/16/silverlight-e-le-nuove-interfacce-per-i-servizi-finanziari.aspx"&gt;post&lt;/A&gt; relativo ad una applicazione di esempio per il mondo finaziario sviluppata in Silverlight 2 che evidenzia come la possibilità di sfruttare le potenzialità delle nuove tecnologie per lo sviluppo di interfacce RIA (Rich Interactive Application) possa essere&amp;nbsp;utilizzata a vantaggio di qualunque tipologia di applicazione. Da ieri è disponibile online una nuova serie di esempi per la sanità &lt;A href="http://www.mscui.net/PatientJourneyDemonstrator/" target=_blank mce_href="http://www.mscui.net/PatientJourneyDemonstrator/"&gt;Microsoft Health Common User Interface (MSCUI) Patient Journey Demonstrator&lt;/A&gt; che dimostrano come anche in questo settore le potenzialità delle nuove tecnologie&amp;nbsp; possono essere utilizzate per costruire una nuova generazione di applicazioni, evidenziando le qualità di Silverlight come piattaforma di sviluppo.&lt;/P&gt;
&lt;P&gt;Si tratta di una implementazione di esempio per un&amp;nbsp;progetto piu ampio&amp;nbsp;per il settore dell'Healtcare: Il &lt;A href="http://www.mscui.net/" target=_blank mce_href="http://www.mscui.net/"&gt;Microsoft Health Common User Interface (CUI)&lt;/A&gt;&amp;nbsp;. L'iniziativa,&amp;nbsp;sviluppata in UK,&amp;nbsp; ha lo scopo di contribuire alla costruzione di una User Interface Design Guidance&amp;nbsp; per le applicazioni in questo settore, completa di un Toolkit di controlli che indirizza una ampia gamma di scenari , abilitando la costruzione di una nuova generazione di applicazioni, più semplici da usare e più efficaci rispetto alla loro funzione nel campo sanità .&lt;/P&gt;
&lt;P&gt;Disponibili oltre allo scenario anche il documento di&amp;nbsp; &lt;A href="http://www.mscui.net/DesignGuide/DesignGuide.aspx" mce_href="http://www.mscui.net/DesignGuide/DesignGuide.aspx"&gt;Design Guidance&lt;/A&gt;&amp;nbsp; e il &lt;A href="http://www.mscui.net/ControlsAndSamples.aspx" mce_href="http://www.mscui.net/ControlsAndSamples.aspx"&gt;Toolkit con i controlli ed esempi&lt;/A&gt; realtivi all'iniziativa&amp;nbsp; che possono essere &lt;A href="http://www.codeplex.com/mscui/Release/ProjectReleases.aspx" target=_blank mce_href="http://www.codeplex.com/mscui/Release/ProjectReleases.aspx"&gt;scaricati&lt;/A&gt; e installati per utilizzarli con Microsoft Visual Studio. Disponibile anche&amp;nbsp; la &lt;A href="http://www.mscui.net/Roadmap/Roadmap.aspx" mce_href="http://www.mscui.net/Roadmap/Roadmap.aspx"&gt;Roadmap&lt;/A&gt; del programma.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Nel &lt;A href="http://www.mscui.net/PatientJourneyDemonstrator/" target=_blank mce_href="http://www.mscui.net/PatientJourneyDemonstrator/"&gt;Health Common User Interface (MSCUI) Patient Journey Demonstrator&lt;/A&gt;&amp;nbsp; vengono al momento implementate tre applicazioni che descrivono una tipica giornata di un paziente dal punto di vista della struttura ospedaliera che lo cura. Si va dalle interfacce finanziare fino alle informazioni sanitarie ed agli esami clinici.&amp;nbsp; Molte le funzionalità&amp;nbsp; di&amp;nbsp; Silverlight 2 Beta 1 utilizzate tra cui:&lt;/P&gt;
&lt;P&gt;· Deep zoom per la visualizzazione dei dati degli complex ECG (elettrocardiogrammi) &lt;/P&gt;
&lt;P&gt;· Scaling layout&lt;/P&gt;
&lt;P&gt;· Data-binding&lt;/P&gt;
&lt;P&gt;· Animazioni e integrazione di contenuti multimediali &lt;/P&gt;
&lt;P&gt;· Ampio utilizzo di grafica vettoriale per la rappresentazione di diagrammi&lt;/P&gt;
&lt;P&gt;Trovate anche&amp;nbsp;una &lt;A href="http://www.mscui.net/Showcase/Demonstrators.aspx" mce_href="http://www.mscui.net/Showcase/Demonstrators.aspx"&gt;introduzione allo scenario&lt;/A&gt; completa di video , descrizione delle applicazioni e scenari evolutivi futuri per le applicazioni di questo settore.&lt;/P&gt;
&lt;P&gt;Alcuni link per chi volesse cominciare a provare Silverlight 2 :&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/GetStarted/" mce_href="http://silverlight.net/GetStarted/"&gt;http://silverlight.net/GetStarted/&lt;/A&gt; dove trovate i link per installare il Runtime , le estensioni per Visual Studio 2008 e la versione di Expression Blend per SL2&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/learn/tutorials.aspx" mce_href="http://silverlight.net/learn/tutorials.aspx"&gt;http://silverlight.net/learn/tutorials.aspx&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tutorial sul Silverlight 2&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/learn/labs.aspx" mce_href="http://silverlight.net/learn/labs.aspx"&gt;http://silverlight.net/learn/labs.aspx&lt;/A&gt; .&amp;nbsp;&amp;nbsp;&amp;nbsp; laboratori sulle nuove funzionalità di Silverlight 2&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://blogs.msdn.com/italy/archive/2008/04/24/the-next-web-now-le-slides.aspx" target=_blank mce_href="http://blogs.msdn.com/italy/archive/2008/04/24/the-next-web-now-le-slides.aspx"&gt;Slide dell'evento The Next Web Now&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;- &lt;A href="http://sessions.visitmix.com/" target=_blank mce_href="http://sessions.visitmix.com/"&gt;Sessioni&lt;/A&gt; di MIX 08&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Per chi fosse interessato alle funzionalità di accesso remoto a dati esposti da siti via http e web service, aspetto fondamentale per lo sviluppo di soluzioni applicative con SL suggerisco un &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/18/accesso-ai-dati-con-siliverlight-2-beta-1.aspx" mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/18/accesso-ai-dati-con-siliverlight-2-beta-1.aspx"&gt;mio post sull'argomento&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Ottimo &lt;A href="http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx"&gt;tutorial introduttivo&lt;/A&gt; sul blog di Scott Guthrie.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/SilverlightelenuoveapplicazioniRIAServiz_83E0/clip_image001_2.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8470221" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Smart+Client/default.aspx">Smart Client</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Esempio di applicazione RIA con Silverlight :  Sanremoanchenoi da Rai Click e Kora</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/05/05/esempio-di-applicazione-ria-con-silverlight-sanremoanchenoi-da-rai-click-e-kora.aspx</link><pubDate>Mon, 05 May 2008 09:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8435734</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8435734.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8435734</wfw:commentRss><description>&lt;P&gt;L’evoluzione delle interfacce utente e l’emergere di applicazioni RIA (Rich Interactive Application) basate in gran parte sull’utilizzo di rich-plugin come Silverlight che arricchiscono il browser e potenziano le possibilità offerte dall’HTML e dalle tecniche AJAX sta rapidamente modificando la modalità con cui vengono sviluppate le applicazioni. Un ottimo esempio di come sia possibile combinare queste nuove potenzialità per sviluppare interfacce innovative è rappresentato dal sito sanremoanchenoi (&amp;nbsp;l'iniziativa è conlusa e qui potete vedere il &lt;A class="" href="http://roberto.design.members.winisp.net/sanremoanchenoi/sanremoanchenoi.html" target=_blank mce_href="http://roberto.design.members.winisp.net/sanremoanchenoi/sanremoanchenoi.html"&gt;video del&amp;nbsp;sito&lt;/A&gt;) . Si tratta di un iniziativa di &lt;A href="http://www.raiclick.it/" mce_href="http://www.raiclick.it/"&gt;Rai Click&lt;/A&gt;, implementata da &lt;A href="http://www.kora.it/" mce_href="http://www.kora.it/"&gt;Kora&lt;/A&gt; , avviata durante il festival di Sanremo e collegata proprio alla sperimentazione di nuove forme di user interface e di gestione di contenuti UGC (User Genereted Content) .&lt;/P&gt;
&lt;P&gt;L’iniziativa è basata su una serie di contest dove gli utenti possono inviare dei video per dimostrare le loro capacità “artistiche” collegate alla musica. Gli utilizzatori del sito possono navigare sui video, votarli ed inserire dei commenti. Di seguito un’immagine dell’interfaccia realizzata:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=438 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image002_thumb.jpg" width=610 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Il sito rappresenta anche un ottimo esempio di utilizzo di software sviluppato localmente in combinazione con l’utilizzo di servizi offerti da piattaforme su Internet . Infatti, l’infrastruttura di gestione ed erogazione dei contenuti video è completamente basata su &lt;A href="http://silverlight.live.com/" mce_href="http://silverlight.live.com/"&gt;Silverlight Streaming&lt;/A&gt; che, attraverso la sua CDN (Content Delivery Network), fornisce il servizio di streaming per i filmati che vengono visualizzati nel client.&lt;/P&gt;
&lt;P&gt;L’interfaccia dell’intera applicazione è sviluppata con tecniche AJAX e sfrutta una logica sviluppata in Java Script per pilotare sia le componenti di grafica ed animazione sviluppate con Silverlight 1.0 , sia le componenti HTML. L’interazione con i servizi di back end che gestiscono il voting , i commenti ed il catalogo dei video è stata implementata in puro stile AJAX e l’iterfaccia client accede ai servizi attraverso XMLHttpRequest senza alcun reload dell’interfaccia client.&lt;/P&gt;
&lt;P&gt;L’applicazione ha poi una componente di back-end redazionale che gestisce l’approvazione dei contenuti e che in particolare gestisce l’encoding e l’upload dei video su Silverlight Streaming. L’encoding dei video viene realizzato con &lt;A href="http://www.microsoft.com/expression/products/overview.aspx?key=encoder" mce_href="http://www.microsoft.com/expression/products/overview.aspx?key=encoder"&gt;Expression Encoder&lt;/A&gt;. L’architettura di massima dell applicazione e la seguente:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=484 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image004_thumb.jpg" width=615 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;La gestione della fruizione dei video dal client Silverlight avviene attraverso l’utilizzo combinato dei servizi locali al sito ed di Silverlight streaming . I video vengono pubblicati sul servizio , il catalogo locale del sito mantiene i riferimenti ai video . L’interfaccia caricata nel browser client interroga via http(utilizzando XMLHttpRequest via javascript) il servizio di catalogo che fornisce l’elenco dei video. L’elenco dei video viene caricato via Javascript nell’interfaccia Silverlight e mostrato all’utente.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=438 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image006_thumb.jpg" width=609 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nel momento in cui l’utente seleziona un video per effettuare lo streaming , l’applicazione client interroga attraverso degli script forniti da Silverlight Streaming che vengono inclusi nel client il servizio per ottenere l’url del video che viene poi visualizzato dal MediaElement di Silverlight, opportunamente utilizzato nell’interfaccia che provvede a consumare lo streaming fornito dalla CDN . &lt;/P&gt;
&lt;P&gt;Per chi volesse approfondire l’utilizzo di Silverlight Streaming service e la costruzione di siti UGC consiglio di utilizzare l’applicazione di esempio &lt;A href="http://www.codeplex.com/videoshow" mce_href="http://www.codeplex.com/videoshow"&gt;video.show&lt;/A&gt; che offre un esempio completo di codice sorgente scaricabile per realizzare siti UGC per il video sharing, con la possibilità di utilizzare Silverlight Streaming come meccanismo per la distribuzione dei video e l’SDK &lt;A href="http://dev.live.com/silverlight/" mce_href="http://dev.live.com/silverlight/"&gt;del servizio Silverlight Streaming&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Grazie alla flessibilità di Silverlight ed alla flessibilità dello XAML che consente di sviluppare una efficace collaborazione tra developer che sviluppa la logica dell’interfaccia e designer che implementa le componenti di grafica ed animazione, l’applicazione è stata sviluppata in tempi estremamente rapidi (2 settimane) . Anche per l’integrazione e la messa in produzione, la possibilità di sfruttare Silverlight Streaming come piattaforma di delivery dei video ha consentito di gestire l’intero progetto in tempi estremamente ridotti.&lt;/P&gt;
&lt;P&gt;La ricchezza di animazioni e contenuti multimediali dell’interfaccia utente mette in evidenza la notevole flessibilità che viene fornita da Silverlight. L’intera interfaccia contenuta nel browser è infatti realizzata con il plugin, combinando anche parte di contenuti in HTML che vengono utilizzati in overlay al contenuto implementato con Silverlight. Come si può vedere dalla seguente figura:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image008_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image008_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=clip_image008 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image008_thumb.jpg" width=602 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image008_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;abbiamo una serie di oggetti grafici in overlay su un video di background, dove vengono composti i diversi menù, che interagiscono con l’utente attraverso delle animazioni che compongono le diverse scene previste in base alle selezioni effettuate dall’utente. &lt;/P&gt;
&lt;P&gt;Anche le liste dei contenuti video vengono posizionate in overlay al video di background e consentono di avere in preview il video selezionato in completo overlay sul video di background , componendo in un'unica interfaccia animazioni, grafica, testo e differenti flussi video:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image010_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image010_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=414 alt=clip_image010 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image010_thumb.jpg" width=576 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image010_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Le componenti dell’interfaccia che consento il voting e l’inserimento di commenti e contenuti sono sviluppate con dell’HTML che viene anche in questo caso posizionato in overlay ai contenuti realizzati in Silverlight ed anche in questo caso gestito con una logica in Java script che sfrutta le classiche tecniche AJAX per colloquiare con i servizi di back end che abbiamo descritto nell’architettura vista in precedenza. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image012_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image012_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=404 alt=clip_image012 src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image012_thumb.jpg" width=577 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/EsempiodiapplicazioneRIAconSilverlightSa_10CA7/clip_image012_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Il sito resterà in produzione solo per alcune settimane collegate al contest collegato a sanremo.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8435734" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Live/default.aspx">Live</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Una giornata di Steve Ballmer</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/04/28/una-giornata-di-steve-ballmer.aspx</link><pubDate>Mon, 28 Apr 2008 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8435341</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8435341.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8435341</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;Durante la giornata che Steve Ballmer ha passato in italia la scorsa settimana Carlo Rossanigo lo ha seguito per tutto il tempo ed ha girato una video intervista con lui nei ritagli di tempo della giornata. Domande a tutto campo da su cosa pensa mentre&amp;nbsp; fa jogging, a come vive il social networking, da come si aspetta che sarà il web 3.0,&amp;nbsp;s cosa suggerisce ai giovani, .. insomma, 14 domande “unplugged” da non perdere !!!!&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;Le trovate su &lt;A class="" href="http://www.mclips.it/archive/2008/04/26/one-day-with-steve-ballmer-14-domande-unplugged-a-steve-ballmer.aspx" mce_href="http://www.mclips.it/archive/2008/04/26/one-day-with-steve-ballmer-14-domande-unplugged-a-steve-ballmer.aspx"&gt;mclips&lt;/A&gt; .&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;A href="http://www.mclips.it/archive/2008/04/26/one-day-with-steve-ballmer-14-domande-unplugged-a-steve-ballmer.aspx"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8435341" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/OBA/default.aspx">OBA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Evento The Next Web Now: Slide sessione Costruire applicazioni RIA con Silverlight 2</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/04/24/evento-the-next-web-now-slide-sessione-costruire-applicazione-ria-con-silverlight-2.aspx</link><pubDate>Thu, 24 Apr 2008 15:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8421462</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8421462.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8421462</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.microsoft.com/italy/eventi/mix/default.mspx" mce_href="http://www.microsoft.com/italy/eventi/mix/default.mspx"&gt;&lt;IMG style="MARGIN: 0px 5px 0px 0px" height=86 alt=clip_image003 src="http://blogs.msdn.com/blogfiles/italy/WindowsLiveWriter/TheNextWebNowMIXEssentials23AprileaMilan_918B/clip_image003_3.jpg" width=282 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/italy/WindowsLiveWriter/TheNextWebNowMIXEssentials23AprileaMilan_918B/clip_image003_3.jpg"&gt;&lt;/A&gt;Ecco le &lt;A href="http://cid-d82de3153feb12ed.skydrive.live.com/self.aspx/Public/NextWeb/EventoWeb-Silverlight-w.zip" target=_blank mce_href="http://cid-d82de3153feb12ed.skydrive.live.com/self.aspx/Public/NextWeb/EventoWeb-Silverlight-w.zip"&gt;slide della mia sessione "Costruire applicazioni RIA con Silverlight 2"&lt;/A&gt; all'evento&amp;nbsp; &lt;A href="http://blogs.msdn.com/italy/archive/2008/04/09/the-next-web-now-mix-essentials-23-aprile-a-milano.aspx" target=_blank mce_href="http://blogs.msdn.com/italy/archive/2008/04/09/the-next-web-now-mix-essentials-23-aprile-a-milano.aspx"&gt;The Next Web Now – MIX Essentials&lt;/A&gt; . Sul blog di &lt;A class="" href="http://blogs.msdn.com/italy/archive/2008/04/24/the-next-web-now-le-slides.aspx" target=_blank mce_href="http://blogs.msdn.com/italy/archive/2008/04/24/the-next-web-now-le-slides.aspx"&gt;MSDN Italia&lt;/A&gt; i link alle altre slide e presto anche i filmati delle sessioni. Grazie a tutti per la partecipazione.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8421462" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Sessioni del lancio online</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/04/03/sessioni-del-lancio-online.aspx</link><pubDate>Thu, 03 Apr 2008 17:21:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8353927</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8353927.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8353927</wfw:commentRss><description>&lt;p&gt;Disponibili &lt;a href="http://www.microsoft.com/italy/beit/sezioni.aspx" target="_blank"&gt;online le sessioni del lancio&lt;/a&gt;. In particolare disponibile anche video e slide della sessione che ho preparato con Mario Fontana e Mauro Minella sul tema&amp;#160; Visual Tools For Office da titolo &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/italy/beit/sezione_video.aspx?vid=14" target="_blank"&gt;&amp;quot;Sviluppo di applicazioni per Microsoft Office System&amp;quot;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.microsoft.com/italy/beit/sezioni.aspx"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="320" alt="image" src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/Sessionidellancioonline_E5E1/image_3.png" width="758" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8353927" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/ORM/default.aspx">ORM</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Office/default.aspx">Office</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/OBA/default.aspx">OBA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/VSTO/default.aspx">VSTO</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>IIS7 e gli scenari video in progressive download </title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/19/iis7-e-gli-scenari-video-in-download-progressive.aspx</link><pubDate>Wed, 19 Mar 2008 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8286008</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8286008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8286008</wfw:commentRss><description>&lt;P&gt;Una delle tendenze più rilevanti nell'evoluzione dei contenuti nel mondo del Web è sicuramente rappresentata dall'enorme crescita dei contenuti video che oramai sta investendo siti di ogni dimensione. Si va dalla possibilità di ospitare materiale video generato dagli utenti, news, film , trailer. &lt;/P&gt;
&lt;P&gt;Erogare contenuti video è estremamente costoso in termini di consumo di banda e gli scenari attraverso i quali viene generalmente affrontata questa tematica sono essenzialmente di tre tipi:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- Hosting dei contenuti video presso strutture terze specializzate nella distribuzione di questo tipo di contenuti attraverso CDN (Content Delivery Network) specifiche&lt;/P&gt;
&lt;P&gt;- Infrastruttura di streaming installata nella server farm&lt;/P&gt;
&lt;P&gt;- Download progressive , ovvero distribuzione del file attraverso un server web &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;La piattaforma Microsoft offre una soluzione per tutti e tre gli scenari :&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- &lt;A href="http://silverlight.live.com/" target=_blank mce_href="http://silverlight.live.com/"&gt;Silverlight Streaming&lt;/A&gt; che offre una CDN per la distribuzione di contenuti video e di applicazioni Silverlight in generale&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://www.microsoft.com/windows/windowsmedia/forpros/serve/prodinfo2008.aspx" target=_blank mce_href="http://www.microsoft.com/windows/windowsmedia/forpros/serve/prodinfo2008.aspx"&gt;Windows Media Services&lt;/A&gt; per Windows Server 2008 che forniscono una piattaforma di streaming integrata in Windows Server con completo supporto per il DRM&lt;/P&gt;
&lt;P&gt;- &lt;A class="" href="http://www.iis.net/media" mce_href="http://www.iis.net/media"&gt;IIS 7 Media Pack&lt;/A&gt;&amp;nbsp; che offre nuove funzionalità ad IIS7 per gestire gli scenari di download progressive , da poco disponibile nella versione finale.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Uno degli scenari tipici, in particolare per la distribuzione di video di piccole dimensioni è&amp;nbsp; lo scenario di download progressive,&amp;nbsp; dove il file viene posizionato semplicemente sul server web, mentre lo streaming viene utilizzato in scenari più complessi o per scenari in cui vengono trasmessi video in diretta. Nel download progressive, non abbiamo le ottimizzazioni sulla banda offerte dal server di streaming , il consumo di banda è elevatissimo in quanto il server web effettua il download del file verso il player client utilizzatore, sfruttando completamente la banda disponibile, indipendentemente dal bit rate con cui il video è codificato per la visualizzazione. Inoltre, nella maggioranza dei casi, l'utente guarda solo i primi secondi del video che nel frattempo va in download a banda completa praticamente inutilmente.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Nel nuovo Media Pack per IIS7 troviamo le funzionalità di BitRate Throttling che consentono di gestire gli scenari di download progressive,&amp;nbsp; permettendo di ottimizzare il consumo di banda in modo configurabile sulla base del reale formato di codifica del file, ed a garantire un maggior numero di connessioni contemporanee possibili. Tra le caratteristiche fondamentali del nuovo supporto il media pack installa un&amp;nbsp;modulo che permette di effettuare il download del file in base al bit rate di encoding. La risposta ed il funzionamento del&amp;nbsp;modulo è completamente configurabile&amp;nbsp; dal livello del server web, fino ad arrivare al livello del singolo file.&lt;/P&gt;
&lt;P&gt;La lista dei formati supportati è la seguente:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;.asf &lt;/LI&gt;
&lt;LI&gt;.avi &lt;/LI&gt;
&lt;LI&gt;.flv &lt;/LI&gt;
&lt;LI&gt;.m4v&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;.mov &lt;/LI&gt;
&lt;LI&gt;.mp3 &lt;/LI&gt;
&lt;LI&gt;.mp4 &lt;/LI&gt;
&lt;LI&gt;.rm &lt;/LI&gt;
&lt;LI&gt;.rmvb &lt;/LI&gt;
&lt;LI&gt;.wma &lt;/LI&gt;
&lt;LI&gt;.wmv &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;E' possibile estendere il Media Pack per supportare ulteriori formati.&lt;/P&gt;
&lt;P&gt;Per installare il MediaPack Bit Rate Throttling potete trovare qui il setup:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;32 bit - &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1762"&gt;http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1762&lt;/A&gt; &lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;64 bit - &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1764"&gt;http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1764&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Per dimostrare la funzionalità del media pack e la semplicità di configurazione ed utilizzo, ho effettuato un piccolo test installandomi una macchina di prova. Sulla root del sito ho posizionato un file di esempio;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=382 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_2.png" width=586 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E l'ho pubblicato con la funzionalità di throttling disabilitata a livello del server web:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=539 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_1.png" width=739 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=520 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb.png" width=741 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Di seguito potete vedere l'andamento del consumo di banda realizzato durante la riproduzione del video:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_8.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=527 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_3.png" width=1025 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Il Media Pack per configuare il Bit Rate Throttling offre una interfaccia completamente integrata nell'ambiente di amministrazione di IIS7&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=539 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_1.png" width=739 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Dall'interfaccia provvedo ad abilitare la funzionalità : &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=520 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb.png" width=741 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;ed in particolare di seguito&amp;nbsp; vediamo la configurazione impostata per i file di tipo .wmv:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=479 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_4.png" width=449 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Con la configurazione impostata , i primi 20 secondi necessari per l'avvio rapido del filmato verranno forniti a banda completa (FastStart) , successivamente il download avverrà al 100% (Throttle Rate) del bitrate di encoding del video che nel nostro esempio è di 300kps.&lt;/P&gt;
&lt;P&gt;La funzionalità di Bit Rate Throttling può anche essere applicata ad altri tipi di contenuti , configurando la parte data dell'entry e stabilendo quindi il la banda assegnata per il download&lt;/P&gt;
&lt;P&gt;Effettuado nuovamente il play del video l'andamendo del consumo di banda in questo caso avrà un andamento che è il seguente:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_14.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=493 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_6.png" width=998 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/IIS7egliscenarivideoindownloadprogressiv_7D1B/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Contribuendo significativamente ad ottimizzare il consumo di banda , ed a garantire un maggior numero di connessioni contemporanee possibili.&lt;/P&gt;
&lt;P&gt;Per uteriori informazioni vi suggerisco i seguenti walkthrough:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A class="" href="http://learn.iis.net/page.aspx/148/bit-rate-throttling-configuration-walkthrough/" mce_href="http://learn.iis.net/page.aspx/148/bit-rate-throttling-configuration-walkthrough/"&gt;Bit Rate Throttling Configuration Walkthrough&lt;/A&gt;. &lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A class="" href="http://learn.iis.net/page.aspx/149/bit-rate-throttling-extensibility-walkthrough/" mce_href="http://learn.iis.net/page.aspx/149/bit-rate-throttling-extensibility-walkthrough/"&gt;Bit Rate Throttling Extensibility Walkthrough&lt;/A&gt;. &lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Tra le altre caratteristiche offerte da IIS7 all'interno del Media Pack vi segnalo anche la possibilità di costruire delle playlist server side anche per i contenuti in download progressive, funzionalità utile ad esempio&amp;nbsp; per costruire playlist introducendo contenuti pubblicitaril. Informazioni e Walkthrough di utilizzo &lt;A class="" href="http://www.iis.net/WebPlaylists" target=_blank mce_href="http://www.iis.net/WebPlaylists"&gt;qui&lt;/A&gt; .&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8286008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Media/default.aspx">Media</category></item><item><title>Accesso ai dati con Siliverlight 2 Beta 1</title><link>http://blogs.msdn.com/giuseppeguerrasio/archive/2008/03/18/accesso-ai-dati-con-siliverlight-2-beta-1.aspx</link><pubDate>Tue, 18 Mar 2008 11:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8272689</guid><dc:creator>Giuseppe Guerrasio</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/giuseppeguerrasio/comments/8272689.aspx</comments><wfw:commentRss>http://blogs.msdn.com/giuseppeguerrasio/commentrss.aspx?PostID=8272689</wfw:commentRss><description>&lt;P&gt;In questo fine settimana ho passato un po di tempo libero ad approfondire i bit disponibili della &lt;A href="http://silverlight.net/GetStarted/#betajump" target=_blank mce_href="http://silverlight.net/GetStarted/#betajump"&gt;Beta 1 di Silverligth 2&lt;/A&gt; . Tra le tantissime novità offerte dal supporto del codice managed,&amp;nbsp; la nuova versione mette a disposizione un'ampia parte delle librerie .NET tra cui nuovi meccanismi per accedere a dati esposti da siti Internet\Intranet via HTTP.&lt;/P&gt;
&lt;P&gt;Sia Internet che nelle intranet è sempre più frequente l'utilizzo dell'HTTP per l'esposizione di informazioni attraverso diverse forme (Web Service Soap,RSS, REST, POX, JSON, etc). &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=375 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_2.png" width=450 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Lo scenario tipico di sviluppo Web che prevedeva lo strato di accesso ai dati realizzato direttamente dalla parte server dell'applicazione Web ,&amp;nbsp; sta rapidamente evolvendo. Anche le&amp;nbsp; applicazioni&amp;nbsp; basate sul browser sono sempre più caratterizzate da una larga presenza di codice client, che sfrutta tecniche AJAX&amp;nbsp;&amp;nbsp; per consumare dati offerti da servizi esposti da server. In particolare diventano sempre più frequenti gli scenari in cui si utilizzano fonti dati esposte da siti differenti, che vengono combinate in un unica interfaccia direttamente sul client. &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=449 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb.png" width=531 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Questo tipo di scenario non riguarda esclusivamente le applicazioni sviluppate per Internet ma diventa sempre più presente anche in scenari Intranet. Con sempre maggior frequenza le aziende cominciano a &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2007/12/11/la-fine-della-tirannia-dell-or-software-services-s-s.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2007/12/11/la-fine-della-tirannia-dell-or-software-services-s-s.aspx"&gt;combinare il software interno con servizi esterni&lt;/A&gt;. Le applicazioni e le &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2007/12/12/saas-soa-e-s-s-impatto-per-le-aziende.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2007/12/12/saas-soa-e-s-s-impatto-per-le-aziende.aspx"&gt;informazioni aziendali vengono utilizzate in combinazione&amp;nbsp; con servizi presenti su Internet e con le applicazioni delle aziende clienti o partner&lt;/A&gt;, creando scenari un cui la gestione dell'accesso ai dati da parte del codice che gira nel browser client, diventa sempre più sofisticata e complessa. Ad esempio, un azienda che ha bisogno di un software per la gestione di spedizioni presso i propri punti vendita potrebbe sviluppare un applicazione client che aggrega le informazioni sui punti vendita estratte da servizi presenti nella intranet , posizionando i punti vendita sulle mappe fornite da un provider di mappe su Internet ed i servizi del corriere utilizzato per effettuare le spedizioni, integrando con i dati aziendali&amp;nbsp; i servizi per gli ordini, lo stato della spedizione , etc.&lt;/P&gt;
&lt;P&gt;Evidentemente in scenari più complessi di integrazione non tutta l'aggregazione dei servizi può essere implementata nel client , perchè in moltissimi casi il coordinamento dei servizi stessi comporta la gestione di processi asincroni che vanno gestiti con specific Business Process Manager , ma sono comunque molti gli scenari in cui ha senso aggregare nel client. Nel nostro scenario un esempio ll'invio di un ordine di spedizione verrà sicuramente gestito attraverso il BPM dell'azienda che provvederà poi ad inviare l'ordine al servizio del corriere mentre lo stato della singola spedizione&amp;nbsp; potrebbe direttamente essere richiesto dal client al servizio del corriere e combinato direttamente sulla mappa e con gli altri dati provenienti dall'Intranet.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=509 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_4.png" width=783 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Altra interessante modalità di integrazione dei servizi con i processi dell'azienda è rappresentata dalla possibilità di sfruttare office ed il pattern OBA per collegare un scenario di questo tipo , direttamente con gli strumenti di produttività che le persono utilizzano per portare avanti i processi di tutti i giorni, ed una blla implementazione reale di uno scenario simile è rappresentata daei servizi che sta implementando FedEx &lt;A href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/02/12/servizi-online-e-office-un-esempio-dal-mondo-reale.aspx" target=_blank mce_href="http://blogs.msdn.com/giuseppeguerrasio/archive/2008/02/12/servizi-online-e-office-un-esempio-dal-mondo-reale.aspx"&gt;mostrati alla office developers conference&lt;/A&gt;&amp;nbsp; .&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_12.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=517 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_5.png" width=812 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_5.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Con la prima versione di Silverlight gestire l'accesso a fonti dati è possibile direttamente dallo XAML per immagini, video , suoni mentre per l'accesso a sorgenti dati&amp;nbsp; occorre utilizzare il JS e l'oggetto XmlHttpRequest . Attraverso queste modalità e gia possibile sviluppare delle interessanti applicazioni di mashup (esempio interessante sviluppato in Italia sul blog msdn) , ma ovviamente sviluppare completamente utilizzando JS XMLHttprequest con sorgenti dati JSON o XML non è semplice e nemmeno particolarmente performante nella parte di parsing e caricamento dei dati sull'interfaccia utente. &lt;/P&gt;
&lt;P&gt;In alcuni casi, per eliminare il costo del parsing sul client, è anche possibile fare in modo di costruire dei servizi in grado di rispondere direttamente con delle porzioni di XAML che vengono valorizzate server side, con i dati estratti da sorgenti specifiche e caricati a partire da template disponibili sul server. Lato client si può utilizzare XMLHttpRequest o il downloader di Silverlight per connettrsi all'url sul server che restituisce lo XAML contenente i dati e caricarlo nell'interfaccia utilizzando CreateFromXaml . &lt;A href="http://silverlight.net/learn/learnvideo.aspx?video=113" target=_blank mce_href="http://silverlight.net/learn/learnvideo.aspx?video=113"&gt;Questo Howto&lt;/A&gt; mostra un semplice esempio di utilizzo di questa tecnica che sfutta lo XAML mentre &lt;A href="http://silverlight.net/learn/learnvideo.aspx?video=242" target=_blank mce_href="http://silverlight.net/learn/learnvideo.aspx?video=242"&gt;questo&lt;/A&gt; mostra l'utilizzo di web service da Silverligh 1.0&amp;nbsp; .&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_14.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=455 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_6.png" width=704 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;L'utilizzo di AJAX e quindi dello JavaScript e di XMLHttpRequest per accedere a fonti dati remote comporta una notevole difficoltà di debug ed è sottoposto alle restrizioni imposte dal browser per il cross-scripting . Infatti attraverso questa tecnica possono essere interrogati solo URL residenti sullo stesso dominio da cui è stata caricata la pagina in esecuzione sul Browser. E' possibile attraverso specifiche tecniche di impiego di script dinamici o proxy lato server, Iframe etc, superare una parte di queste limitazioni , ma il risultato incrementa ancora di più la complessità di sviluppo e debug.&lt;/P&gt;
&lt;P&gt;Con l'arrivo di Silverlight 2 (SL2) ed il supporto di .NET nello sviluppo con Silverlight abbiamo a disposizione un' ampia serie di classi che andranno ulteriormente ad arricchisi nella versione finale del nuovo plug-in. Attraverso SL2 abbiamo a disposizione le classi per consumare sia Web Service SOAP che per accedere direttamente a URL in GET e POST che per l'utilizzo di RSS , aggiunte anche le classi per gestire socket in uscita. Attraverso il nuovo modello di sviluppo è possibile anche effettuate cross-scripting attraverso quei siti che impostano sulla root del loro dominio il file di policy per questa funzionalità. Viene supportato anche il file di policy di Flash , per cui su tutti i siti in cui è già presente questo file è possibile fare crossscripting con Silverlight. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_19.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_19.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=507 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_8.png" width=687 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Oltre al supporto per il cross-scripting, il nuovo modello di controlli di SL2 supporta le funzionalità di databinding con le stesse modalità che sono utilizzate nel .NET Framework e Windows Presentation foundation , rendendo di fatto estremamente semplice anche il caricamento dei dati estratti dai servizi&amp;nbsp; sui controlli dell'interfaccia utente. Disponibile anche il supporto per LINQ to XML che ci permette di gestire con semplicità la manipolazione delle strutture XML estratte dai servizi.&lt;/P&gt;
&lt;P&gt;Facciamo un esempio pratico provando a sviluppare un client per video.msn.com ed in particolare per estrarre un elenco di video casuale e visualizzare le informazioni fornite in formato XML dall'URL: &lt;A href="http://catalog.video.msn.com/randomVideo.aspx?mk=us&amp;amp;vs=0&amp;amp;ff=99&amp;amp;c=10&amp;amp;random=12345" target=_blank mce_href="http://catalog.video.msn.com/randomVideo.aspx?mk=us&amp;amp;vs=0&amp;amp;ff=99&amp;amp;c=10&amp;amp;random=12345"&gt;http://catalog.video.msn.com/randomVideo.aspx?mk=us&amp;amp;vs=0&amp;amp;ff=99&amp;amp;c=10&amp;amp;random=12345&lt;/A&gt;&amp;nbsp;&amp;nbsp; . Di seguito l'XML che viene restituito dal servizio di MSN:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_7.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_7.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=567 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_1.png" width=938 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;La piccola applicazione che realizzeremo avrà quindi la seguente struttura:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_21.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_21.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=481 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_9.png" width=602 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_9.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In particolare per accedere alle informazioni utilizzeremo la classe System.Net.WebClient messa a disposizione dalla versione di .NET associata a SL2 che consente di accedere ad URL Internet in GET e POST a patto di contattare un URL sullo stesso dominio da cui abbiamo scaricato l'applicazione o su un dominio che ha posizionato sulla sua root un file di policy per il cross-scripting Silverlight o Flash. Infatti su catalog.msn.video.com troviamo il file clientaccesspolicy.xml : &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_15.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_15.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=312 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_3.png" width=520 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Per costruire il nostro client SL2 utiliziamo Visual Studio 2008 selezionando lo specifico template di progetto per Silverlight scegliendo di farci generare anche il progetto Web per il test dell'applicazione:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_17.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_17.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=520 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_7.png" width=813 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_7.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_25.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_25.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=499 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_11.png" width=825 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_11.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ottenendo così una soluzione con due progetti: uno per l'implementazione dell'applicazione SL2, l'altro per l'applicazione Web:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_27.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_27.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=366 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_12.png" width=303 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_12.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;SL2 supporta oltre al Canvas due nuovi controlli di Layout , ovvero i contenitori per il posizionamento dei controlli sulla nostra interfaccia. Per il nostro esempio utiliziamo una Grid, equivalente a quella che abbiamo nel fratello maggiore WPF, con due righe all'interno delle quali inseriremo gli elementi fondamentali dell'intrfaccia: nella prima riga i controlli per impostare i parametri della ricerca sul contenuto dei risultati, nella seconda il contenuto selezionato in base ad i parametri di ricerca impostati. Per poter inserire , impostiamo ,inoltre, la proprietà ShowGridLines a true per visualizza la struttura della griglia: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_29.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_29.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=594 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_13.png" width=918 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_13.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_31.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_31.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=758 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_14.png" width=882 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_14.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Sull'handler dell'evento click del controllo Button inserito per effetuare la ricerca:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_23.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_23.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=115 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_10.png" width=887 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_10.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;inseriamo il codice che utilizzando la classe WebClient&amp;nbsp; ci permetterà di accedere ai dati di cataalogo. La classe WebClient mette a disposizione i metodi per accedere ed estrarre informazioni da un URL solo attraverso un pattern asincrono. Per accedere al catalogo di MSN video ed estrarre le informazioni in XML utilizzaremo il seguente codice:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_35.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_35.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=324 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_16.png" width=793 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_16.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_37.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_37.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=645 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_17.png" width=713 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_17.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Le informazioni in XML ottenute dal servizio possono essere direttamente caricate in u Array utilizzando Linq To Xml . Per utilizzare questa funzionalità occorre referenziare lo specifico assembly System.Linq.Xml :&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_41.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_41.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=519 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_19.png" width=877 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_19.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Dove ns è una proprietà per gestire in namespace contenuto nel file XML, GetUriAsset un metodo helper per estrarre idati e VideoSource una specifica classe inserita nel progetto per rappresentare le informazioni dei video:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_43.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_43.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=378 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_20.png" width=950 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_20.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Ottenuto l'array con le informazioni , possiamo sfruttare il databinding e collegare direttamente la collezione contenente i dati da visualizzare ad uno dei nuovi controlli offerti da SL2 completi di supporto per il databindig. Per questo semplice esempio utilizzeremo direttamente il nuovo controllo DataGrid che aggiungeremo allo XAML:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_51.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_51.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=494 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_24.png" width=847 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_24.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;e poi lo collegheremo ai dati usando la proprietà ItemSource:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_53.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_53.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=333 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_25.png" width=898 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_25.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Ottenendo a runtime il seguente risultato:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_47.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_47.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=520 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_22.png" width=924 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_22.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Come tutto il modello dei controlli di SL2 in maniera speculare a quanto possibile in WPF è possibile definire dei template di visualizzazione per i controlli. Infatti , ad esempio, nella colonna contenente l'url dell'immagine di preview possiamo impostare un template per fare visualizzare l'immagine al posto dell'url nella specifica colonna utilizzando la funzionalità di databinding per collegare i dati ad i controlli inseriti nel template. &lt;/P&gt;
&lt;P align=left&gt;Nel nostro esempio, in particolare, andiamo ad usare il template della RowDetails ovvero la riga di dettaglio che viene supportata dal DataGrid per ogli riga inserita. Impostiamo un template sulla riga di dettaglio per permettere la visualizzazione dell'immagine di preview del video. Il campoSource del controllo immagine lo colleghiamo al campo ImageUrl del datacontext con la specifica funzionalità di databinding ( {Binding ImageUrl} ) corrente e&amp;nbsp; impostiamo anche la specifica proprietà della DataGrid che ci permette di mostrare la RowDetails nel momento in cui la riga viene selezionata:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_57.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_57.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=252 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_27.png" width=984 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_27.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Il risultato ottenuto a runtime sarà il seguente:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_55.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_55.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=426 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_26.png" width=956 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_26.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Oltre al campo Image, possiamo anche direttamente inserire un MediaElement e riprodurre il direttamente il video.&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_61.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_61.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=186 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_29.png" width=971 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_29.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_59.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_59.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=405 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_28.png" width=884 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_28.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Agendo con altri template è possibile personalizzare completamente la griglia così come qualunque altro controllo adattandola come vogliamo alle nostre esigenze grafiche.&lt;/P&gt;
&lt;P align=left&gt;Come abbiamo già detto l'oggetto WebClient è solo uno dei meccanismi offerti da SL2 per l'accesso ai dati. Per l'accesso a servizi SOAP silverlight mette a disposizione lo stack client di WCF permettendo l'utilizzo del classico modello "Add Service Reference" che consente di generare da Visual Studio una classe proxy a partire dai metadati del WSDL esposto dal servizio, classe che poi può essere usata direttamente per l'accesso a servizio. Anche in questo caso il proxy genera solo la possibilità di utilizzare con un pattern asincrono le chiamate al servizio, per evitare di bloccare l'interfaccia utente. Di seguito uno schema dello stack WCF per SL2.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_67.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_67.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=345 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_32.png" width=460 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_32.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Facciamo anche un piccolo progetto di test per l'utilizzo di Web Services da SL2 utilizzando WCF come servizio server. Sviluppiamo un semplice client SL2 per estrarre le informazioni dei clienti del classico database Northwind esposto attraverso un servizio WCF. Partiamo con un nuovo progetto Silverlight e selezioniamo anche la costruzione dell'applicazione Web di test.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;All'interno dell'applicazione web di test aggiungiamo un modello LINQ To Sql&amp;nbsp; per accedere alla tabella Customers del database Northwind :&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_39.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=318 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_18.png" width=541 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Con il wizard di LINQ To Sql selezioniamo la tabella Customers e ci facciamo generare il modello di classi per l'accesso ai dati dal nostro ORM:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_45.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=332 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_21.png" width=433 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Impostiamo la specifica proprietà che ci consente di rendere serializzabili le classi generate da Linq To Sql:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_49.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=310 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_23.png" width=488 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Aggiungiamo un servizio di tipo WCF al nostro progetto:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_33.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=326 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_15.png" width=567 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Dove implementiamo la seguente interfaccia per estrarre l'elenco dei clienti dal database customers che sono in una specifica città:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_69.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=275 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_33.png" width=696 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Implementiamo l'interfaccia sul servizio ed impostiamo con LINQ la query per estrarre i clienti in base al parametro selezionato:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_71.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=414 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_34.png" width=637 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Come ultimo step per permettere l'accesso a SL2 al servizio, impostiamo come profilo di banding il basicProfile , agendo sul file di configurazione della nostra applicazione client per fare in modo che l'implementazione SOAP del servizio sia compatibile con il Basic Profile SOAP che viene supportato da SL2:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_75.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=228 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_36.png" width=731 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Lato SL2 implementiamo una semplice interfaccia per l'invio della richiesta al servizio e la visualizzazione della risposta:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_73.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=450 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_35.png" width=867 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Per poter agganciare il servizio, dal progetto SL2 usiamo la classica add service reference, selezionando il servizio WCF :&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_77.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=506 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_37.png" width=881 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;L'ambiente di sviluppo carica il WSDL esposto dal servizio e ci implementa il proxy necessario per l'accesso al servizio e la configurazione di WCF:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_79.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=152 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_38.png" width=225 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Sull'evento di click del Button query inserito nell'interfaccia SL implementiamo il codice per accedere al servizio , e sul metodo di callback agganciamo non il databinding la DataGrid ai dati estratti dal servizio:&lt;/P&gt;
&lt;P align=left&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_81.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=430 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_39.png" width=995 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Completando il nostro esempio:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_83.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=609 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_40.png" width=716 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Per approfondire questo aspetto vi consiglio :&amp;nbsp; &lt;A title=http://msdn2.microsoft.com/en-us/library/cc296254(VS.95).aspx href="http://msdn2.microsoft.com/en-us/library/cc296254(VS.95).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/cc296254(VS.95).aspx"&gt;http://msdn2.microsoft.com/en-us/library/cc296254(VS.95).aspx&lt;/A&gt; .&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;In SL2 avremo a disposizione anche i serializzatori JSON . Al link&amp;nbsp; &lt;A href="http://code.msdn.microsoft.com/SilverlightWS" target=_blank mce_href="http://code.msdn.microsoft.com/SilverlightWS"&gt;http://code.msdn.microsoft.com/SilverlightWS&lt;/A&gt;&amp;nbsp;&amp;nbsp; trovate alcuni esempi del supporto JSON su cui il team di sviluppo sta lavorando :&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_65.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_65.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=315 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_31.png" width=536 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_31.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Interessante anche la funzionalità prevista per l'ambiente di sviluppo paste as XmlSerializable che ci consentirà da VisualStudio di fare copia e incolla di un frammento XML per generare direttamente una classe tipizzata per rappresentare lo stesso XML con una classe .NET, cosa che in parte è possibile con il tool da riga di comando XSD.EXE di .NET.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_63.png" mce_href="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_63.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=349 alt=image src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_30.png" width=552 border=0 mce_src="http://blogs.msdn.com/blogfiles/giuseppeguerrasio/WindowsLiveWriter/AccessoaidaiconSiliverlight2Beta1_71B1/image_thumb_30.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Disponibile anche il supporto per i socket, ma solo verso il dominio da cui è stata scaricata l'applicazione (no crossscripting al momento) ed il supporto per Syndication che è praticamente identico a quello disponibile in .NET 3.5. &lt;/P&gt;
&lt;P&gt;Per chi volesse cominciare a provare Silverlight 2 suggerisco i seguenti link:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/GetStarted/#betajump"&gt;http://silverlight.net/GetStarted/#betajump&lt;/A&gt; dove trovate i link per installare il Runtime , le estensioni per Visual Studio 2008 e la versione di Expression Blend per SL2&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/learn/tutorials.aspx"&gt;http://silverlight.net/learn/tutorials.aspx&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tutorial sul Silverlight 2&lt;/P&gt;
&lt;P&gt;- &lt;A href="http://silverlight.net/learn/labs.aspx"&gt;http://silverlight.net/learn/labs.aspx&lt;/A&gt; .&amp;nbsp;&amp;nbsp;&amp;nbsp; laboratori sulle nuove funzionalità di Silverlight 2&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P align=left mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=left&gt;Al link &lt;A title=http://silverlight.net/Quickstarts/Remote/default.aspx href="http://silverlight.net/Quickstarts/Remote/default.aspx" target=_blank mce_href="http://silverlight.net/Quickstarts/Remote/default.aspx"&gt;http://silverlight.net/Quickstarts/Remote/default.aspx&lt;/A&gt; trovate un quickstart sugli argomenti trattati.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8272689" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/RIA/default.aspx">RIA</category><category domain="http://blogs.msdn.com/giuseppeguerrasio/archive/tags/Silverlight/default.aspx">Silverlight</category></item></channel></rss>