<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Confessions of a Dangerous Mind</title>
        <link>http://blogs.ugidotnet.org/dsenatore/Default.aspx</link>
        <description>Brain.FlushBuffer()</description>
        <language>it-IT</language>
        <copyright>Davide Senatore</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>Confessions of a Dangerous Mind</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/dsenatore/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Distributed Dataset in uno scenario Multi-Tier [1]</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/27/94777.aspx</link>
            <description>&lt;p&gt;Il .net Framework 3.5 e Visual Studio 2008 hanno portato una ventata di novità nel mondo dello sviluppo .net. Linq, Entity Framework, le novità di ASP.net e molte altre cose utilissime e capaci di rendere più "snello" il lavoro di tutti i giorni. Tutte queste novità hanno però messo in ombra una grossa innovazione che è stata introdotta nei Dataset Tipizzati: i Dataset Distribuiti.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOOO! Io odio i Dataset!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Fermi tutti! Se siete arrivati fino a qui ci sono due possibilità: o amate i dataset, o li odiate! E' proprio così, il Dataset, questo amato/odiato oggetto, è da sempre al centro della diatriba tra puristi dell'architettura e pragmatici del risultato. Io non sono pro o contro Dataset; questo ci tengo a dirlo subito. Semplicemente scelgo lo strumento più adatto allo sviluppo che deve essere intrapreso, tenendo in considerazione il maggior numero di parametri che mi possono aiutare durante la scelta, senza preconcetti.&lt;/p&gt;  &lt;p&gt;Per taluni progetti, soprattutto semplici applicazioni Client-Server, il dataset è stato ed è un'ottima soluzione. Uno dei problemi di cui soffriva il dataset tipizzato era quello di immagazzinare in un' unica classe i dati relativi alle "Entità" (Tabelle) e all'accesso ai dati (TableAdapter). Questo, unito al fatto che in uno scenario di applicazioni distribuite per utilizzare le stesse entità tra il client (solitamente uno SmartClient) e l'applicazione server (Web Service) doveva per forza essere condivisa l'intera classe del dataset attraverso i vari "Tiers" applicativi, ha da sempre limitato l'uso del Dataset quale strumento per la realizzazione di applicazioni distribuite.&lt;/p&gt;  &lt;p&gt;Molti di noi (me compreso) hanno trovato delle soluzioni a questo problema, ad esempio condividendo gli schemi xsd del dataset attraverso gli strati applicativi. Il problema maggiore, comunque, è rappresentato dalla mancanza di un ambiente integrato per una gestione "ragionata ed organizzata" del Dataset Distribuito.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Distributed DataSet: to the rescue!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ma cos'è un Dataset Distribuito? E soprattutto, che cosa lo distingue da un Dataset tipizzato tradizionale? La risposta è semplice:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Un dataset distribuito è molto simile ad un dataset tipizzato, tranne per il fatto che tutte le entità che modellano le tabelle del nostro DB vengono collocate e compilate in un progetto, e quindi in una dll, separata rispetto al progetto nel quale viene implementato l'accesso ai dati.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Per scendere nel pratico, se creiamo un progetto &lt;em&gt;Northwind.DataAccess&lt;/em&gt;, dobbiamo creare anche un progetto &lt;em&gt;Northwind.Entities&lt;/em&gt; che conterrà le classi relative alle entità. Questo progetto viene mantenuto sincronizzato rispetto al progetto Northwind.DataAccess, in modo che alla variazione di tabelle (aggiunta di colonne) o all'aggiunta di tabelle stesse, il progetto Entities non perda coerenza. Tutto l'accesso ai dati che consiste in query e stored procedures, rimane completamente all'interno del progetto DataAccess.&lt;/p&gt;  &lt;p&gt;Quest'ultima osservazione ci può far intuire come la dll &lt;em&gt;Entities&lt;/em&gt; possa agevolmente essere utilizzata attraverso i vari tiers applicativi, con ovvi pro:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;in una applicazione SmartClient è possibile utilizzare, creando una referenza ad essa, la dll delle entità per sfruttare i meccanismi RAD di Visual Studio ed effettuare binding a design-time come se avessimo il Dataset disponibile localmente &lt;/li&gt;    &lt;li&gt;è possibile utilizzare le entità attraverso i tiers in modo trasparente, in quanto il dataset mantiene lo stato delle modifiche ad esso apportate atttraverso i vari tiers &lt;/li&gt;    &lt;li&gt;è possibile creare applicazioni completamente "tier-unaware", ovvero creando dei provider configurabili attraverso file di configurazione si riesce ad utilizzare lo stesso SmartClient in configurazione Client-Server o n-Tier senza dover modificare logiche di binding o dover riscrivere classi per effettuare lo stesso &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Naturalmente, ci sono anche dei contro, peraltro abbastanza importanti:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;condividere classi attraverso i vari tier può essere limitante. Una modifica della classe ci obbliga a riaggiornare ogni strato che fa uso della dll contente le classi, e non sempre questo è possibile o consigliabile &lt;/li&gt;    &lt;li&gt;l'impiego dei Dataset non è "pulito" quanto l'impiego di un Domain Model (POCO) &lt;/li&gt;    &lt;li&gt;la semplicità e la trasparenza del sistema può invogliare a trasferire troppi dati tramite il Dataset, occupando così troppa banda. Il problema può essere mitigato se si progettano con attenzione quelli che poi saranno i metodi di scambio dati tra i tiers. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Conclusioni&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In questa prima overview abbiamo chiarito le differenze tra un Dataset Distribuito ed un normale Dataset TIpizzato. Ci sono moltissime altre particolarità da vedere, ma cercheremo di sondarle nel prossimo articolo, assieme con la nostra soluzione per l'impiego effettivo dei dataset distribuiti.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94777.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/27/94777.aspx</guid>
            <pubDate>Thu, 27 Nov 2008 21:59:49 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94777.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/27/94777.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94777.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94777.aspx</trackback:ping>
        </item>
        <item>
            <title>Natale, luminarie e sprechi</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/20/94712.aspx</link>
            <description>&lt;p&gt;Stamattina sono uscito e ho fatto un giro nella zona commerciale della mia città. Ho visto in diversi centri commerciali un grande fermento per l'installazione delle &lt;strong&gt;luminarie di Natale&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Questa cosa mi fa letteralmente andare in bestia. Anche quest' anno, verranno sprecati migliaia e migliaia di Euro in &lt;strong&gt;energia&lt;/strong&gt; per "fare natale". Ora, io AMO il Natale, ma non mi si venga a dire che in un periodo di crisi economica come quello che stiamo attraversando, c'è l'assoluto bisogno di sprecare energia, che per il nostro paese &lt;em&gt;&lt;u&gt;è uno dei beni di consumo con il costo più alto&lt;/u&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;In TV passano le pubblicità che invitano a risparmiare, abbassando la temperatura dei radiatori, spegnendo le luci inutili, chiudendo l'acqua mentre ci si lava i denti... e queste luminarie? Perchè non le spegnamo per questo Natale? Perchè i centri commerciali non prendono il denaro che hanno a Budget per i costi delle luminarie e non lo devolvono in beneficenza alle associazioni per la lotta contro il cancro o le malattie rare, o per aiutare i bambini malati?&lt;/p&gt;  &lt;p&gt;Non è buonismo il mio, si badi bene; chi mi conosce sa che sono tutto tranne che buonista. Il Natale o si sente o non si sente. Non saranno certo delle luminarie a farci sentire meglio, più buoni o meglio disposti verso il nostro prossimo. &lt;/p&gt;  &lt;p&gt;Pensiamoci!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94712.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/20/94712.aspx</guid>
            <pubDate>Thu, 20 Nov 2008 14:57:03 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94712.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/20/94712.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94712.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94712.aspx</trackback:ping>
        </item>
        <item>
            <title>Inter-Process Communication Techniques: Message Queue</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/13/94638.aspx</link>
            <description>&lt;p&gt;Riprendiamo lo scenario del post precedente: abbiamo un sistema di raccolta ordini formato da una applicazione web, un servizio che funge da "dispatcher" ed un sistema di terze parti che è fuori dal nostro controllo, ovvero non possiamo intervenire direttamente su di esso, bensì possiamo solamente usare delle primitive TCP/IP per accedervi.    &lt;br /&gt;La criticità del sistema consiste nella possibile congestione delle connessioni TCP/IP al sistema di terze parti, connessioni che risultano limitate da problematiche &lt;em&gt;tecniche&lt;/em&gt; e di &lt;em&gt;licensing&lt;/em&gt;.     &lt;br /&gt;Ovviamente le connessioni all'applicazione web sono fuori dal nostro controllo, nel senso che potrebbe connettersi un utente come mille.     &lt;br /&gt;L'utilizzo del servizio (broker) interposto tra l'applicazione web ed il sistema di terze parti rappresenta la soluzione del problema, in quanto esso permette di differire l'esecuzione delle funzionalità del sistema di terze parti, serializzando le richieste e comunicando in modo asincrono con l'utente dell'applicazione web. &lt;/p&gt;  &lt;p&gt;Il meccanismo che può essere utilizzato per comunicare tra l'applicazione web ed il servizio di windows è MSMQ (Microsoft Message Queue).    &lt;br /&gt;MSMQ, integrato nel sistema operatvo, è un server per la gestione di code di messaggi. Esso consente di creare code, immagazzinarvi messaggi, ritornare messaggi di     &lt;br /&gt;acknowledge alle applicazioni che lo impiegano. Il tutto è perfettamente integrato in .net grazie al namespace &lt;em&gt;&lt;strong&gt;System.Messaging&lt;/strong&gt;&lt;/em&gt;.     &lt;br /&gt;Nel codice seguente si può vedere come venga configurato il codice per la creazione della coda e la ricezione dei messaggi all'interno del servizio. &lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Messaging;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; MessageQueue _ordersQueue;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Start()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; _ordersQueuePath = &lt;span style="color: #006080"&gt;@".\private$\Orders"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Creo o inizializzo la coda di ricezione&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (MessageQueue.Exists(_ordersQueuePath))&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         _ordersQueue = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessageQueue(_ordersQueuePath);                &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         _ordersQueue = MessageQueue.Create(_ordersQueuePath);                 &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     }            &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     _ordersQueue.Formatter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlMessageFormatter(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Type[] { &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(CodeSapiens.Business.Order) });&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;     _ordersQueue.MessageReadPropertyFilter.CorrelationId = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Bind del gestore dell'evento ReceiveCompleted&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     _ordersQueue.ReceiveCompleted += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ReceiveCompletedEventHandler(ReceiveCompletedHandler);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     _ordersQueue.BeginReceive();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ReceiveCompletedHandler(Object source, ReceiveCompletedEventArgs asyncResult)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;     Message m = _ordersQueue.EndReceive(asyncResult.AsyncResult);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//=====================================&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;     &lt;span style="color: #008000"&gt;// Elaboro il messaggio...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//=====================================                &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;     CodeSapiens.Business.Order _order = (CodeSapiens.Business.Order)m.Body;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;     OrderProcessor _processor = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderProcessor();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;     _processor.ProcessOrder(_order);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Riavvio la ricezione&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;     _ordersQueue.BeginReceive();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;L'oggetto OrderProcessor consentirà di elaborare, tramite il sistema di terze parti, l'ordine immagazzinato nella coda, proveniente dall'applicazione web.&lt;/p&gt;

&lt;p&gt;La coda andrà configurata impostando Full Control per l'utente &lt;strong&gt;NETWORK SERVICE&lt;/strong&gt; che fa girare il servizio w3wp.exe. Con l'utente NETWORK SERVICE si farà girare anche il servizio "Broker" in modo da uniformare i permessi di accesso alla coda. &lt;/p&gt;

&lt;p&gt;Le classi "Order" e "OrderDetail" verranno utilizzate come corpo dei messaggi della coda:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; CodeSapiens.Business&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     [Serializable()]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Order&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Order()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         {    &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Details = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;OrderDetail&amp;gt;();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Guid Id { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; CustomerId { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Address { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; CustomerEMail { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; DateTime OrderDate { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; List&amp;lt;OrderDetail&amp;gt; Details { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;     [Serializable()]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; OrderDetail&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; OrderDetail(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; productId, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; quantity, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; price, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; tax)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ProductId = productId;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Quantity = quantity;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Price = price;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Tax = tax;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ProductId { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; Quantity { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; Price { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; Tax { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Le Classi saranno serializzabili e dovranno essere immagazzinate nella nostra coda per essere smistate dal servizio. Vediamo dunque il codice utilizzato per indirizzare la coda dalla web application e per immagazzinarvi il messaggio per l'elaborazione differita. &lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SendMessage()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; _ordersQueuePath = &lt;span style="color: #006080"&gt;@".\private$\Orders"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     MessageQueue _ordersQueue = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessageQueue(_ordersQueuePath);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Creo l'oggetto Ordine da immagazzinare nella coda&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Verrà in seguito elaborato dal servizio&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     CodeSapiens.Business.Order _order = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CodeSapiens.Business.Order();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     _order.Id = Guid.NewGuid();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;     _order.CustomerId = &lt;span style="color: #006080"&gt;"1"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     _order.Address = &lt;span style="color: #006080"&gt;"One Microsoft Way"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;     _order.CustomerEMail=&lt;span style="color: #006080"&gt;"info@customer.net"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     _order.OrderDate = DateTime.Parse(txtReserveFrom.Text);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;     _order.Details.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderDetail(&lt;span style="color: #006080"&gt;"ABX12"&lt;/span&gt;, 2, 20, 10));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     _order.Details.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderDetail(&lt;span style="color: #006080"&gt;"XYP51"&lt;/span&gt;, 2, 20, 10));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     _order.Details.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrderDetail(&lt;span style="color: #006080"&gt;"ZVB11"&lt;/span&gt;, 3, 10, 20));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     Message _message = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Message();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     _message.Body = _order;            &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     _ordersQueue.Send(_message);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;L'uso della coda ha delle implicazioni positive che possono essere identificate nei punti seguenti:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;non c'è connessione diretta tra la web application e il database/sistema di terze parti; &lt;/li&gt;

  &lt;li&gt;la sicurezza della coda è controllata dalle ACL del sistema operativo, per cui possiamo decidere che in una coda un processo possa solo leggere o solo scrivere &lt;/li&gt;

  &lt;li&gt;Se, per qualche motivo, il servizio va offline, la coda funge da buffer e non è necessario bloccare la web application. Non appena il servizio ritorna on-line, esso elaborerà i messaggi immagazzinati nella coda durante il periodo di mancato funzionamento &lt;/li&gt;

  &lt;li&gt;non si incorre nel problema della "resource starvation", in quanto un numero di utenti concorrenti potenzialmente molto elevato non va ad attingere direttamente alla risorsa critica (la connessione al sistema di terze parti) bensì alla coda, che ai nostri fini può essere considerata a capacità infinita &lt;/li&gt;

  &lt;li&gt;è possibile implementare meccanismi di elaborazione del messaggio anche molto complessi (validazione ordine) senza irritare l'utente, che non è costretto ad attendere on line l'esecuzione di una pagina web &lt;/li&gt;

  &lt;li&gt;Utilizzando le proprietà di acknowledge dei messaggi inviati e ricevuti ed una cosa amministraiva, è possibile avere la certezza che la cosa di destinazione abbia ricevuto il messaggio inviato dalla nostra applicazione &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concludendo, l'uso di MessageQueue consente di aggiungere un grado di libertà che permette di accoppiare sistemi in modo "lasco"; ulteriori integrazioni saranno possibili in tempi successivi, proprio grazie alla libertà e alla robustezza messa a disposizione dall'infrastruttura MSMQ. Ovviamente sarà nostra cura aggiungere una gestione del logging degli errori e una gestione esaustiva delle eccezioni.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94638.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/13/94638.aspx</guid>
            <pubDate>Thu, 13 Nov 2008 20:41:46 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94638.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/11/13/94638.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94638.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94638.aspx</trackback:ping>
        </item>
        <item>
            <title>Inter-Process Communication Techniques</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/29/94431.aspx</link>
            <description>&lt;p&gt;Con la sigla IPC (&lt;a href="http://en.wikipedia.org/wiki/Inter-process_communication"&gt;Inter-Process Communication&lt;/a&gt;) si intendono tutte le tecniche che permettono di effettuare comunicazione intra-thread o intra processo.&lt;/p&gt;  &lt;p&gt;Queste tecniche sono particolarmente utili in ambienti di integrazione, dove è necessario far comunicare sistemi eterogenei in modo da preservare l'utilizzo di risorse o mitigare eventuali rallentamenti dovuti a congestioni dei sistemi.&lt;/p&gt;  &lt;p&gt;Tra queste tecniche, su piattaforma Microsoft, possiamo individuare:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.net Remoting &lt;/li&gt;    &lt;li&gt;Comunicazione via socket &lt;/li&gt;    &lt;li&gt;Windows Communication Foundation &lt;/li&gt;    &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Message_Queuing"&gt;Microsoft Message Queue&lt;/a&gt; (MSMQ) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ognuna di queste tecniche presenta i suoi pro e i suoi contro, ma grazie alla perfetta integrazione con il .net Framework e con WCF, MSMQ è una tecnologia testata, robusta, e rappresenta un'ottima scelta per una implementazione di una comunicazione Inter-Processo.&lt;/p&gt;  &lt;p&gt;Vediamo in concreto con uno scenario reale l'impiego di una tecnica IPC. Abbiamo un sistema di terze parti cui è possibile accedere tramite protocollo proprietario attraverso socket, ma le connessioni disponibili per l'accesso a questo sistema sono limitate. Si vuole implementare un'applicazione web che dialoghi con questo sistema, senza che questa applicazione abbia accesso diretto (via socket) al sistema di terze parti onde evitare problematiche di starving della risorsa connessione via socket, disponibile in quantità limitata.&lt;/p&gt;  &lt;p&gt;La strategia da impiegare è quella di impiegare un broker, rappresentato in concreto da un servizio di windows, che si occupi si formare la connessione al sistema di terze parti, mentre alla nostra applicazione web non resterà che comunicare con il broker.&lt;/p&gt;  &lt;p&gt;Qui entra in gioco la tecnica di comunicazione inter processo. Come prima cosa, vediamo un semplice approccio al problema, lasciando ad un successivo post la soluzione basata sul messaging.&lt;/p&gt;  &lt;p&gt;Come sappiamo, un'applicazione web può comunicare con un servizio che abbia sovrascritto il metodo OnCustomCommand, in un modo molto semplice, ovvero mediante l'invocazione di un comando, come possiamo vedere negli snippet seguenti. Per primo, il servizio:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; CodeSapiens.Services&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; IPCService : ServiceBase&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IPCService()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             InitializeComponent();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnCustomCommand(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; command)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (command)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;             {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; 150: &lt;span style="color: #008000"&gt;//Identificativo del comando&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//Esecuzione del comando...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;:&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;         }        &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Per finire, il consumer (web application, win application, web service...):&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; _sc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ServiceController(&lt;span style="color: #006080"&gt;"IPCService"&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #008000"&gt;//...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; MyExecuteCommand() &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (_sc.Status == ServiceControllerStatus.Stopped)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         _sc.Start();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Esegue il comando 150&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     _sc.ExecuteCommand(150);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Questa tecnica, apparentemente banale, è estremamente utile, ma solo nel caso in cui non si debbano passare parametri al servizio, ovvero il comando che viene eseguito sia indipendente da parametri. La tecnica sopradescritta puà essere utilizzata per richiamare un comando da applicazioni web o da web services in modo totalmente trasparente.&lt;/p&gt;

&lt;p&gt;Nel prossimo post vedremo come far comunicare in modo espressivamente più "ricco" sistemi indipendenti mediante l'uso di MSMQ.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94431.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/29/94431.aspx</guid>
            <pubDate>Tue, 28 Oct 2008 23:54:04 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94431.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/29/94431.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94431.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94431.aspx</trackback:ping>
        </item>
        <item>
            <title>TimeZoneInfo, una classe molto utile</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/28/94420.aspx</link>
            <description>&lt;p&gt;Nel FW 3.5 è presente una nuova classe per la gestione delle "zone temporali", la classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx"&gt;TimeZoneInfo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Personalmente ritengo molto utile questa classe, che permette di manipolare efficacemente le date/ore provenienti da diversi server collocati in varie parti del mondo.&lt;/p&gt;  &lt;p&gt;Un esempio molto carino può essere ben inquadrato dal seguente scenario: avete un server in California, e questo server deve marcare dei file con una data ben precisa, che deve essere espressa in "tempo italiano" (badate, tempo, non formato!!). Chiaramente, se in un web Service installato su questo server si invoca la DateTime.Now, si ottiene la data/ora espressa nella timezone in cui si trova il server. Ora, volendo riportare tale orario all'orario italiano, andremo incontro ad una serie di criticità:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ora legale/solare: essendo la data in un fuso diverso dal nostro, dovremmo conoscere come l'ora legale venga gestita in quella zona &lt;/li&gt;    &lt;li&gt;Intervallo temporale tra il fuso di destinazione e quello estero: dovremmo dare per scontato, o meglio, impostare nel file di configurazione, l'intervallo (in ore) che separa il fuso di destinazione e quello estero; in questo caso il problema nasce se in un secondo tempo si vuole spostare il server in una altra zona (cambio fuso) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Impiegando questa classe, è possibile esprimere gli orari in modo assolutamente automatico, usando l'accortezza di lavorare con la data/ora in formato UTC. In questo piccolo esempio possiamo vedere come la classe possa essere utilizzata per enumerare le timezone del sistema e come possa essere impiegata per convertire la data/ora in formato UTC in una data/ora nel formato della timezone desiderata.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 88%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 210px; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; TimeZoneTest&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         {            &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (TimeZoneInfo _tzi &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; TimeZoneInfo.GetSystemTimeZones())&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             {            &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 61.62%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; height: 16px; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;                 Console.WriteLine(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"{0} {1}"&lt;/span&gt;, _tzi.StandardName,TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,_tzi)));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;             Console.WriteLine();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;             Console.WriteLine(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"West Europe Time: {0}"&lt;/span&gt;,TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,&lt;/p&gt;&lt;p&gt;                                    TimeZoneInfo.FindSystemTimeZoneById(&lt;span style="color: #006080"&gt;"W. Europe Standard Time"&lt;/span&gt;))));&lt;/p&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;             Console.WriteLine( &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"Pacific Time: {0}"&lt;/span&gt;,TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, &lt;/p&gt;&lt;p&gt;                                    TimeZoneInfo.FindSystemTimeZoneById(&lt;span style="color: #006080"&gt;"Pacific Standard Time"&lt;/span&gt;))));                       &lt;/p&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;             Console.ReadLine();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Ovviamente, nel nostro caso, potremmo avere un metodo nella nostra Web Application che converte la data ora del server nella TimeZone desiderata a prescindere da dove questo si trovi, permettendo di fatto lo spostamento dell'applicazione su server collocati in qualunque parte del mondo.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94420.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/28/94420.aspx</guid>
            <pubDate>Tue, 28 Oct 2008 07:45:39 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94420.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/28/94420.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94420.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94420.aspx</trackback:ping>
        </item>
        <item>
            <title>Application Settings: perch&amp;egrave; usarli?</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/22/94344.aspx</link>
            <description>&lt;p&gt;La risposta è molto semplice: perchè &lt;em&gt;rappresentano il modo corretto di memorizzare le informazioni di configurazione delle nostre applicazioni client&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Molti di noi, memori delle applicazioni sviluppate nel passato, dove si faceva un estensivo uso dei file .ini, considerano il file &amp;lt;miaapp&amp;gt;.exe.config alla stregua di questo file ini. In parte è proprio così, perchè alcune impostazioni della nostra applicazione stanno bene all'interno di quel file. Alle volte, però, mi sento chiedere se è possibile scrivere quel file per immagazzinare delle altre impostazioni, magari selezionate dall'utente durante l'utilizzo dell'applicazione. Ovviamente la risposta è sì, si può scrivere quel file, ma è &lt;strong&gt;ALTAMENTE&lt;/strong&gt; sconsigliato. Il perchè è dovuto al fatto che non possiamo sapere dove la nostra applicazione verrà installata, nè possiamo imporre al nostro cliente particolari configurazioni o impostazioni di sicurezza che permettano, ad esempio, ad un utente di scrivere all'interno della directory Program Files.&lt;/p&gt;  &lt;p&gt;Sviluppare tutta un'applicazione per poi scoprire che non è compatibile con Vista (ad esempio) solo perchè abbiamo dato per scontato di poter scrivere il file di configurazione nella stessa cartella dove si trova l'eseguibile non è molto bello...&lt;/p&gt;  &lt;p&gt;Gli application settings, quindi, vengono in nostro aiuto, in quanto ci permettono di operare una netta separazione tra impostazioni "immutabili" della nostra applicazione, che verranno memorizzate nel file app.config, e le impostazioni utente, che verranno memorizzate all'interno di un file nella directory AppData relativa al nostro utente.&lt;/p&gt;  &lt;p&gt;In quella posizione, l'utente corrente può sempre scrivere; sono così scongiurati problemi di sicurezza. Inoltre, questo pattern deve essere applicato sempre nel caso in cui si vogliano distribuire le applicazioni con tecnologia&lt;strong&gt; Click-Once&lt;/strong&gt;, in modo che l'utente possa effettuare le proprie impostazioni liberamente, tanto più che esso non può decidere il percorso di installazione di una applicazione Click-Once.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94344.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/22/94344.aspx</guid>
            <pubDate>Wed, 22 Oct 2008 17:03:18 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94344.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/22/94344.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94344.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94344.aspx</trackback:ping>
        </item>
        <item>
            <title>Pubblicare Reports di Reporting Services: RSPublisher</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/01/94219.aspx</link>
            <description>&lt;p&gt;La piattaforma Reporting Services permette di automatizzare moltissime attività di amministrazione: creazione di cartelle, copia e modifica di reports, rendering on-demand dei reports. Essendo un assiduo utilizzatore di RS ho sempre trovato piuttosto scomodo generare gli script per installare i reports presso i clienti, tanto più che spesso le installazioni si fanno in remoto e molte volte non è possibile utilizzare Visual Studio per pubblicare i Report. Il tool a riga di comando RS costringe lo sviluppatore a rimaneggiare lo script di installazione ogni volta che un report viene aggiunto o ne viene modificato il nome.&lt;/p&gt;  &lt;p&gt;Per ovviare al problema ho creato un semplice tool, RSPublisher, che permette di generare dei progetti di deployment di Reports, sotto forma di file XML. Sarà poi sufficiente portare il tool, il file di progetto ed i file RDL con sè per pubblicare tutto all'interno del server del nostro cliente. L'interfaccia è molto semplice e permette di configurare in pochi secondi server di destinazione, cartelle, se sovrascrivere o meno i Reports già presenti e creare dinamicamente i datasource condivisi. Inoltre il tool fa una scansione automatica della directory contenente i reports, sollevandoci così dall'onere di scrivere i nomi dei reports da pubblicare.&lt;/p&gt;  &lt;p&gt;Se qualcuno di voi vuole provarlo, lo può trovare a &lt;a href="http://www.codesapiens.net/public/RSPublisher.zip"&gt;questo indirizzo&lt;/a&gt;. Critiche, migliorie e richieste sono le benvenute!!!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94219.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/01/94219.aspx</guid>
            <pubDate>Wed, 01 Oct 2008 17:08:19 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94219.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/10/01/94219.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94219.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94219.aspx</trackback:ping>
        </item>
        <item>
            <title>Reporting Services: Formattazione dei Subtotali in un controllo Matrix</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/09/30/94199.aspx</link>
            <description>&lt;p&gt;Sempre più spesso mi sento porre la seguente domanda: si possono formattare i subtotali in una Matrix all'interno di un Report di Reporting Services?&lt;/p&gt;  &lt;p&gt;La risposta è ovviamente si, e senza neppure far uso di intricate formule InScope(...) o IIF(...). La maggior parte degli utenti di Reporting Services sembra non sapere che &lt;u&gt;cliccando il piccolo triangolino verde&lt;/u&gt; in alto a destra all'interno della cella relativa al subtotale, nella finestra delle proprietà appariranno una serie di proprietà relative all'oggetto &lt;strong&gt;SubTotal&lt;/strong&gt;, le quali permetteranno di formattare con colori, font e quant'altro il nostro subtotale, rendendo di fatto molto più leggibile il nostro report. Notate che è necessario cliccare esattamente il triangolino verde, e nessun altro punto della cella, pena la selezione dell'oggetto textbox che contiene l'espressione che contraddistingue il subtotale.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/94199.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/09/30/94199.aspx</guid>
            <pubDate>Tue, 30 Sep 2008 12:28:13 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/94199.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/09/30/94199.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/94199.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/94199.aspx</trackback:ping>
        </item>
        <item>
            <title>Grazie Lutz Roeder...</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/08/27/93831.aspx</link>
            <description>&lt;p&gt;La notizia che &lt;strong&gt;Lutz Roeder&lt;/strong&gt;, creatore di Reflector, &lt;a href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/" target="_blank"&gt;non si occuperà più&lt;/a&gt; del tool &lt;u&gt;PIU' IMPORTANTE&lt;/u&gt; per uno sviluppatore .net (Reflector, appunto)  mi dispiace, ma del resto comprendo benissimo che non si può rimanere legati allo sviluppo di uno strumento per troppo tempo, pena una certa "fossilizzazione". Vorrei poter ringraziare pubblicamente Lutz per il lavoro che ha fatto in questi anni, per averci dato uno strumento potente, che ci permette di apprendere e comprendere il funzionamento del Framework .net.&lt;/p&gt;  &lt;p&gt;Probabilmente ognuno di noi sarebbe uno sviluppatore meno capace, se non ci fosse stato .net Reflector. Grazie Lutz!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/93831.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/08/27/93831.aspx</guid>
            <pubDate>Wed, 27 Aug 2008 10:01:16 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/93831.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/08/27/93831.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/93831.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/93831.aspx</trackback:ping>
        </item>
        <item>
            <title>How I Got Started in Software Development</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2008/07/24/93523.aspx</link>
            <description>&lt;p&gt;Ok, ok... Il buon &lt;a href="http://blog.boschin.it/" target="_blank"&gt;Andrea Boschin&lt;/a&gt; mi ha taggato... e quindi non posso esimermi dal tediarvi con un pò di storia della mia vita "programmativa".&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;How old were you when you started programming?        &lt;br /&gt;A quale età hai cominciato a programmare?&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Ho cominciato a programmare a 12 anni. Dopo aver pregato in turco i miei genitori di comprarmi un computer "perchè mi serviva per studiare" (alzino la mano quanti hanno usato questa sporchissima scusa per farsi regalare il computer solo per giocare, esattamente come avevo fatto io), ho ottenuto per natale un Commodore 128.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;How did you get started in programming?        &lt;br /&gt;Come hai cominciato a programmare? &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo stimolo, ancora una volta, furono i videogiochi. Da sempre appassionato di video games "da sala", ero un divoratore di Pac-Man, Ghosts'n'Goblins e Space Harrier, per cui volevo emulare le gesta dei programmatori dell'epoca, veri pionieri che facevano stare in 64 miseri Kb delle autentiche perle. Ricordo ancora con nostalgia il racconto dello sviluppo di un videogioco di Andrew Braybrook, su Zzap! (chi se lo ricorda?)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;What was your first language?        &lt;br /&gt;Qual’è stato il tuo primo linguaggio di programmazione? &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ovviamente il Basic, anzi, il GW-Basic. Ricordo ancora un programma scritto in terza media che calcolava aree e perimetri di tutte le figure geometriche, dati in input i parametri di base della figura.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;What was the first real program you wrote?        &lt;br /&gt;Qual’è stato il primo programma vero che hai scritto?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Probabilmente un programmino il cui listato era contenuto nel manuale del Commodore 128. Mi sembra di ricordare disegnasse dei cerchi di vari colori sullo schermo.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;What languages have you used since you started programming?        &lt;br /&gt;Quali linguaggi hai usato da quando hai cominciato a programmare? &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Mhhh... troppi per ricordarli tutti... GW-Basic, Logo, Quick-Basic, COBOL, C, C++, VB (dalla versione 1.0), VB.net, C# sono solo alcuni, senza contare quelli accessori (SQL, T-SQL, XML...)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;What was your first professional programming gig?        &lt;br /&gt;Quando è stato il tuo primo vero lavoro da programmatore?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Ah... bellissima domanda! Ho scritto in Quick Basic e BTrieve (per i più giovani: Btrieve è un ISAM che poteva essere integrato con vari linguaggi) un software per un mio carissimo amico radioamatore per registrare le frequenze radio. Utilizzato tutt'oggi funziona che è un piacere! Il mio primo lavoro "pagato" però (500.000 lire!!) fu un sistema di catalogazione di Fotografie scritto con database Access e VB 5.0.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;If you knew then what you know now, would you have started programming?        &lt;br /&gt;Con il senno di poi, rifaresti lo stesso il programmatore? Ricominceresti a programmare?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Penso che sviluppare software sia uno dei lavori più belli del mondo, soprattutto per chi, come me, ama creare. Devo però aggiungere anche che non è un lavoro che viene tenuto in considerazione, almeno non nel nostro paese. Un pò di rispetto in più per tutti i "programmatori" (che sono sempre un pò di più di semplici "scrittori di codice") non guasterebbe...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Pensa prima di scrivere! La soluzione migliore è sempre la più semplice...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Se ci fosse una cosa che hai imparato nella tua carriera e che vorresti dire ai giovani programmatori, cosa diresti?&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Non scriverti addosso per amore di soluzioni perfette e infinitamente flessibili. Ricorda che una soluzione infinitamente flessibile richiederà tempo infinito per essere implementata... quindi in una parola: concretezza!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What's the most fun you've ever had ... programming?      &lt;br /&gt;Qual’è la cosa più divertente che hai programmato?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ce ne sono tante, ne scelgo due: un Tetris in QB 45 nel 1991, fatto per scommessa con in mio Prof di Informatica; SilverPacMan, scritto in Silverlight 1.1 a distanza di 18 anni dal Tetris, ma che tradisce ancora una volta il mio grande amore per i videogiochi.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Now, let’s tag someone else...      &lt;br /&gt;Adesso è l’ora di taggare qualcun’altro...&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.dottor.net/" target="_blank"&gt;Andrea Dottor&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.dotmark.net/" target="_blank"&gt;Marco Trova&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/93523.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2008/07/24/93523.aspx</guid>
            <pubDate>Thu, 24 Jul 2008 17:00:53 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/93523.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2008/07/24/93523.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/93523.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/93523.aspx</trackback:ping>
        </item>
    </channel>
</rss>