<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Corrado's BLogs</title>
        <link>http://blogs.ugidotnet.org/corrado/Default.aspx</link>
        <description>Online thoughts of a .NET Funatic</description>
        <language>it-IT</language>
        <copyright>Corrado Cavalli</copyright>
        <managingEditor>corrado@mvps.org</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <image>
            <title>Corrado's BLogs</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/corrado/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/corrado" type="application/rss+xml" /><item>
            <title>WCF: Invocare un metodo via URI usando WebHttpBinding</title>
            <category>WCF</category>
            <link>http://feeds.feedburner.com/~r/corrado/~3/411934630/wcf-invocare-un-metodo-via-uri-usando-webhttpbinding.aspx</link>
            <description>&lt;p&gt;Sto analizzando della documentazione per un &lt;em&gt;proof-of-concept&lt;/em&gt; richiestomi da un cliente, le varie features implicano la presenza di un servizio WCF ma la parte più  “strana” è il fatto che il servizio possa essere invocato da dei micro-dispositivi custom sparsi in tutto il territorio, i quali, per una lunga serie di motivi, devono utilizzare un firmware proprietario.     &lt;br /&gt;Parlando del requisito con il team che si occuperà della parte firmware la risposta che ho avuto è: &lt;em&gt;Il firmware è in grado di invocare una url ed eventualmente parsificarne il risultato ottenuto&lt;/em&gt;.    &lt;br /&gt;Ci sono varie soluzioni per arrivare al risultato, ad esempio si potrebbe creare una pagina web, fare il parsing dei parametri passati e invocare la parte che elabora le informazioni come fa la parte di servizio web consumata dall’applicativo SilverLight che rappresenta l’altro client del servizio WCF.    &lt;br /&gt;Riflettendo su possibili alternative mi sono ricordato di una interessante novità introdotta in WCF col Fx 3.5: il &lt;strong&gt;webHttpBinding&lt;/strong&gt;.    &lt;br /&gt;WebHttpBinding consente l’esposizione di EndPoints che possono essere invocati via Http GET passando i parametri nella query string.&lt;/p&gt;  &lt;p&gt;Esempio:&lt;/p&gt;  &lt;div&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;[ServiceContract]
&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IMyService
{
  [OperationContract]
  [WebGet(UriTemplate=&lt;span style="color: #006080"&gt;"register?id={id}&amp;amp;name={name}&amp;amp;value={value}"&lt;/span&gt;)]
  &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Register(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; id, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name,&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;);
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div&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: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyService : IMyService
{
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Register(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; id, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;)
  {
    &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; status = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (id &amp;gt; 0)
    {
      &lt;span style="color: #008000"&gt;//Do your stuff here...&lt;/span&gt;
      status=&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;
    }
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; status;
  }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;WebGet è l’attributo che indica com’è raggiungibile l’operazione e come sia formattata la relativa Uri attraverso il parametro UriTemplate, oltre a WebGet esiste anche &lt;strong&gt;WebInvoke&lt;/strong&gt; che consente l’uso di altre azioni (POST,PUT,DELETE…)&lt;/p&gt;

&lt;p&gt;A questo punto, è necessario agire sul file web.config indicando l’uso di webHttpBinding, notate come sia necessario utilizzare un custom behavior:&lt;/p&gt;

&lt;div&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;service&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Service.MyService"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ServiceBehavior"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;address&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=""&lt;/span&gt; &lt;span style="color: #ff0000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="webHttpBinding"&lt;/span&gt;
                            &lt;span style="color: #ff0000"&gt;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Contracts.IMyService"&lt;/span&gt;
                            &lt;span style="color: #ff0000"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="&lt;strong&gt;&lt;font color="#ff00ff"&gt;webBehavior&lt;/font&gt;&lt;/strong&gt;"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;address&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mex"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mexHttpBinding"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="IMetadataExchange"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;service&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="&lt;font color="#ff0080"&gt;webBehavior&lt;/font&gt;"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
         &lt;strong&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;webHttp&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/strong&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ServiceBehavior"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceMetadata&lt;/span&gt; &lt;span style="color: #ff0000"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceDebug&lt;/span&gt; &lt;span style="color: #ff0000"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="false"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ospitato il servizio in IIS, per invocare il metodo è sufficiente aprire il browser e invocare la relativa URI:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.codeworks.it/public/blog/WCFInvocareunmetodoviaURI_DFFA/image.png" rel="lightbox"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="104" alt="image" src="http://www.codeworks.it/public/blog/WCFInvocareunmetodoviaURI_DFFA/image_thumb.png" width="573" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Questa soluzione copre esattamente la mia necessità, spero possa essere utile anche a voi.&lt;/p&gt;

&lt;p&gt;
  &lt;/p&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bb1da698-d7e8-4e48-9d7f-6fdec7796af3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/WCF" rel="tag"&gt;WCF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/webHttpBinding" rel="tag"&gt;webHttpBinding&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/94259.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/10/05/wcf-invocare-un-metodo-via-uri-usando-webhttpbinding.aspx</guid>
            <pubDate>Sun, 05 Oct 2008 14:34:11 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/corrado/comments/94259.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/10/05/wcf-invocare-un-metodo-via-uri-usando-webhttpbinding.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/94259.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/10/05/wcf-invocare-un-metodo-via-uri-usando-webhttpbinding.aspx</feedburner:origLink></item>
        <item>
            <title>MVP 2009</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/408987520/mvp-2009.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.codeworks.it/public/blog/MVP2009_762B/image.png" rel="lightbox"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="133" alt="image" src="http://www.codeworks.it/public/blog/MVP2009_762B/image_thumb.png" width="91" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; Erano i primi giorni del 2002, non conoscevo nessuno di quelli che ora affollano il mio Facebook e stavo passando un periodo, dal punto di vista lavorativo, &lt;em&gt;complicato&lt;/em&gt;, uno di quei momenti in cui senti il bisogno di cambiare strada ma il cambiamento ti fa un po paura.    &lt;br /&gt;Ricevo una mail da Fabio Santini che mi informa che ero stato scelto come MVP e mi chiedeva se avevo intenzione di accettare (ma che domande sono?!?) e questo per me è stato il primo stimolo per superare quel periodo e cambiare per certi aspetti ‘vita’ (devo ancora capire se in meglio o in peggio… &lt;img alt="smile_regular" src="http://spaces.live.com/rte/emoticons/smile_regular.gif" /&gt;)&lt;/p&gt;  &lt;p&gt;Da allora sono cambiate parecchie cose, quella mail mi ha fatto conoscere un sacco di persone squisite e vivere un sacco di emozioni, una sola cosa non è cambiata: La voglia di condividere la passione per il mio lavoro con gli altri in tutte le sue forme.   &lt;br /&gt;Lo ammetto: Uno dei motivi per cui lo faccio è anche perchè questa condivisione è la quotidiana occasione per imparare qualcosa di nuovo, sicuramente senza i frequentatori dei newsgroup,forums, conferenze, emails e chat non conoscerei un sacco di argomenti.    &lt;br /&gt;Colgo quindi l’occasione di questo nuovo award per ringraziare tutti color che, senza saperlo, mi aiutano a tenere il cervello allenato (a una certà età, va lubrificato spesso…&lt;img alt="smile_regular" src="http://spaces.live.com/rte/emoticons/smile_regular.gif" /&gt;)    &lt;br /&gt;Non lo faccio (quasi) mai, ma credo sia giusto ringraziare lo &lt;em&gt;special one&lt;/em&gt; (ormai parla solo Genovese e Inglese) che è sempre pronto a rispondere alle mie rotture di scatole: Thank you &lt;a href="http://blogs.technet.com/alead_msft/"&gt;Ale&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e1f9e6e-a44e-42ff-a877-93624e36e3b8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MVP" rel="tag"&gt;MVP&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/94223.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/10/02/mvp-2009.aspx</guid>
            <pubDate>Thu, 02 Oct 2008 06:29:57 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/corrado/comments/94223.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/10/02/mvp-2009.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/94223.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/10/02/mvp-2009.aspx</feedburner:origLink></item>
        <item>
            <title>Tech-Ed 08: I&amp;rsquo;ll be there!</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/399466775/tech-ed-08-irsquoll-be-there.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.codeworks.it/public/blog/TechEd08Illbethere_5B1B/image.png" rel="lightbox"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 5px 0px 0px; border-left: 0px; border-bottom: 0px" height="75" alt="image" src="http://www.codeworks.it/public/blog/TechEd08Illbethere_5B1B/image_thumb.png" width="164" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dopo qualche anno di assenza torno a Tech-Ed e, come &lt;a href="http://blogs.ugidotnet.org/raffaele/archive/2008/09/19/94080.aspx"&gt;Raf&lt;/a&gt; e &lt;a href="http://blogs.ugidotnet.org/topics/archive/2008/09/19/tech-ed-2008-ma-vieni.aspx"&gt;Mauro&lt;/a&gt;, sarò parte dello staff dell’ ATE (Ask The Expert).&lt;/p&gt;  &lt;p&gt;Se partecipate, passate a salutarci!.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f6acf26a-10b0-48b3-b02a-b1fa6d6ca0aa" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Tech-Ed" rel="tag"&gt;Tech-Ed&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/94104.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/09/22/tech-ed-08-irsquoll-be-there.aspx</guid>
            <pubDate>Mon, 22 Sep 2008 04:34:14 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/09/22/tech-ed-08-irsquoll-be-there.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/94104.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/09/22/tech-ed-08-irsquoll-be-there.aspx</feedburner:origLink></item>
        <item>
            <title>LINQ e IEnumerable</title>
            <category>LINQ</category>
            <link>http://feeds.feedburner.com/~r/corrado/~3/393524862/linq-e-ienumerable.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;Disquisendo&lt;/em&gt; di LINQ presso alcuni clienti mi sono reso conto che molti sviluppatori non ne hanno ben chiaro il funzionamento percui ricorre spesso la frase “&lt;em&gt;Bello, ma LINQ costringe a inutili iterazioni”&lt;/em&gt;.     &lt;br /&gt;    &lt;br /&gt;Esempio: &lt;em&gt;Prendiamo un array di interi e supponiamo di volere enumerare i valori &amp;gt;10 interrompendo il ciclo quando il valore contenuto è uguale a 12. &lt;/em&gt;&lt;/p&gt;  &lt;div&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: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; v &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; values)
{
  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (v &amp;gt; 10)
  {
    Console.WriteLine(&lt;span style="color: #006080"&gt;"Value is: {0}"&lt;/span&gt;, v);
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (v &amp;gt; 12)  &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
  }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;in questo caso al terzo elemento l'enumerazione si interrompe. 
  &lt;br /&gt;

  &lt;br /&gt;Con LINQ il codice precedente può essere ricondotto a: 

  &lt;br /&gt;&lt;/div&gt;

&lt;div&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;IEnumerable&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt; query = values.Where(v =&amp;gt; v &amp;gt; 10)
                               .Select(v =&amp;gt; v);
&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt; &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; query)
{
  Console.WriteLine(&lt;span style="color: #006080"&gt;"Value is:{0}"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;);
  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;value&lt;/span&gt; == 12) &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;A questo punto la critica è: “&lt;em&gt;Ok, ma Where enumera &lt;u&gt;tutti&lt;/u&gt; gli elementi e passa a Select quelli che soddisfano il criterio” 

    &lt;br /&gt;&lt;/em&gt;In realtà non è cosi e per dimostrarlo aggiungiamo al nostro esempio una classe con gli stessi extension methods esposti da &lt;em&gt;Enumerable&lt;/em&gt; che, essendo in scope, verrano usati al posto di quelli presenti in System.Linq:&lt;/p&gt;

&lt;div&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: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Extensions
{
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; Where&amp;lt;T&amp;gt; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; items, Func&amp;lt;T, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&amp;gt; filter)
  {
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; count = 0;
    Console.WriteLine(&lt;span style="color: #006080"&gt;"*Entering Where*"&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (T item &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; items)
    {
      Console.WriteLine(&lt;span style="color: #006080"&gt;"Where:{0}"&lt;/span&gt;, count++);
      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (filter(item)) &lt;span style="color: #0000ff"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; item;
    }
  }

  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; IEnumerable&amp;lt;U&amp;gt; Select&amp;lt;T, U&amp;gt; (&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; sequence, Func&amp;lt;T, U&amp;gt; selector)
  {
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; count = 0;
    Console.WriteLine(&lt;span style="color: #006080"&gt;"*Entering Select*"&lt;/span&gt;);
    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var item &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; sequence)
    {
      Console.WriteLine(&lt;span style="color: #006080"&gt;"Select: {0}"&lt;/span&gt;, count++);
      &lt;span style="color: #0000ff"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; selector(item);
    }
  }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Eseguendo il codice l'output ottenuto è il seguente:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.codeworks.it/public/blog/LINQeIEnumerable_139A7/image.png" rel="lightbox"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://www.codeworks.it/public/blog/LINQeIEnumerable_139A7/image_thumb.png" width="314" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;dal quale si denota:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;La Select viene eseguita &lt;u&gt;prima&lt;/u&gt; di Where. &lt;/li&gt;

  &lt;li&gt;La sequenza &lt;u&gt;non viene completamente enumerata&lt;/u&gt;. &lt;/li&gt;

  &lt;li&gt;Ad ogni enumerazione dei risultati corrisponde uno step di enumerazione della query. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seguendo &lt;em&gt;step-by-step&lt;/em&gt; l'esecuzione della query il tutto è ancora più evidente. &lt;/p&gt;

&lt;p&gt;In pratica, definendo &lt;em&gt;Helper&lt;/em&gt; l'equivalente della classe Extensions che non fa uso di extension methods è come se scrivessimo: &lt;/p&gt;

&lt;div&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;IEnumerable&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt; query=Helper.Select(Helper.Where(values,v=&amp;gt;v&amp;gt;10),v=&amp;gt;v);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ovviamente questo non si applica nel caso si faccia uso di conversion operators tipo ToList();&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:00353579-0d0e-4a00-9658-aa6ddaf515d3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/LINQ" rel="tag"&gt;LINQ&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IEnumerable%3cT%3e" rel="tag"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/94042.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/09/15/linq-e-ienumerable.aspx</guid>
            <pubDate>Mon, 15 Sep 2008 20:26:22 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/09/15/linq-e-ienumerable.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/94042.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/09/15/linq-e-ienumerable.aspx</feedburner:origLink></item>
        <item>
            <title>WPF Attached Behaviors</title>
            <category>WPF</category>
            <link>http://feeds.feedburner.com/~r/corrado/~3/380565984/wpf-attached-behaviors.aspx</link>
            <description>&lt;p&gt;Una delle principali difficoltà nel passare dai Windows Forms a WPF è sicuramente quella di affrontare gli stessi problemi in maniera completamente diversa da come sono stati affrontati in passato, in pratica lo stesso problema di chi, dopo anni di VB6 decide di passare a VB 2008.   &lt;br /&gt;Tra le tecniche che, lentamente, stanno ottenendo parecchio successo tra gli sviluppatori WPF c’è sicuramente l' &lt;strong&gt;"Attached Behavior"&lt;/strong&gt; ovvero il racchiudere in una classe esterna una o più funzionalità applicabili in base alla necessità ai vari elementi che compongono una UI WPF.    &lt;br /&gt;Consideriamo un caso tanto semplice, quanto frequente: &lt;em&gt;Selezionare il contenuto di una TextBox quando questa ottiene il focus&lt;/em&gt;.    &lt;br /&gt;Se fossimo nel mondo WinForms avremmo diverse possibilità per raggiungere lo scopo, dal mappare l'evento Enter su una routine comune, al creare un controllo custom che arricchisce il controllo base con la nuova funzionalità.    &lt;br /&gt;Entrambe le soluzioni sono applicabili in WPF, entrambe però hanno, come nei WinForm, dei punti deboli: il primo non è molto riutilizzabile mentre il secondo è forse un pò troppo complesso per un operazione cosi banale.    &lt;br /&gt;In WPF si usa risolvere questo genere di problematiche utilizzando una tecnica denominata &lt;strong&gt;Attached Behavior&lt;/strong&gt; che sfrutta le potenzialità offerte dalle Dependency Properties abbinando &lt;em&gt;Attached Properties&lt;/em&gt; con &lt;em&gt;PropertyChangedCallback&lt;/em&gt;.    &lt;br /&gt;Creiamo quindi una classe TextBoxBehavior e aggiungiamo a questa un attached property denominata &lt;em&gt;AutoSelectText&lt;/em&gt;&lt;/p&gt;  &lt;div&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: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; TextBoxBehavior
{ 
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; GetAutoSelectText (TextBox textBox)
  {
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)textBox.GetValue(AutoSelectTextProperty);
  }
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; SetAutoSelectContents (TextBox textBox, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;)
  {
    textBox.SetValue(AutoSelectTextProperty, &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;);
  }
  &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; DependencyProperty AutoSelectTextProperty =
      DependencyProperty.RegisterAttached(
      &lt;span style="color: #006080"&gt;"AutoSelectedContents"&lt;/span&gt;,
      &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;),
      &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(TextBoxBehavior), 
      &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; UIPropertyMetadata(OnAutoSelectedChanged));

  &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnAutoSelectedChanged (DependencyObject sender, DependencyPropertyChangedEventArgs e)
  {
    &lt;span style="color: #008000"&gt;//Get source&lt;/span&gt;
    TextBox source = (sender &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TextBox);      
    &lt;span style="color: #008000"&gt;//Null means property is not attached to a TextBox&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (source == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)e.NewValue)
      source.GotFocus += HandleGotFocus;
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
      source.GotFocus -= HandleGotFocus;
  }

  &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; HandleGotFocus (&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
  {
    TextBox source = (sender &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; TextBox);
    source.SelectAll();
  }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt; &lt;/div&gt;

&lt;p&gt;Come potete notare la ‘magia’ sta nel sottoscrivere gli eventi che ci interessando nel metodo associato a PropertyChangedCallback che verrà invocato non appena l' Attached Property verrà inizializzata dal parser XAML.
  &lt;br /&gt;A questo punto non ci rimane che aggiungere la funzionalità alle textbox nello XAML (vedi sotto) estendendo, di fatto, il controllo con una soluzione riutilizzabile che non coinvolge la parte dichiarativa in dettagli legati alla funzionalità a run-time.&lt;/p&gt;

&lt;div&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Window&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x:Class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="AttachedBehaviorDemo.Window1"&lt;/span&gt;
    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
    &lt;span style="color: #ff0000"&gt;xmlns:x&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
    &lt;span style="color: #ff0000"&gt;xmlns:m&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="clr-namespace:AttachedBehaviorDemo"&lt;/span&gt;
    &lt;span style="color: #ff0000"&gt;Title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Window1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="300"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="300"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:TextBoxBehavior&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;AutoSelectContents&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="True"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="21"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="10,10"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Test1"&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;m:TextBoxBehavior&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;AutoSelectContents&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="True"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="22"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="10,10"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Test2"&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; 
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Window&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&lt;/span&gt; &lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8b9ac559-588f-4f16-8096-6d2b196fe787" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Attached+Behavior" rel="tag"&gt;Attached Behavior&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93894.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/09/01/wpf-attached-behaviors.aspx</guid>
            <pubDate>Mon, 01 Sep 2008 15:37:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/09/01/wpf-attached-behaviors.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93894.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/09/01/wpf-attached-behaviors.aspx</feedburner:origLink></item>
        <item>
            <title>XAML Power Toys</title>
            <category>WPF</category>
            <link>http://feeds.feedburner.com/~r/corrado/~3/380289090/xaml-power-toys.aspx</link>
            <description>&lt;p&gt;Il vulcanico &lt;a href="http://karlshifflett.wordpress.com/"&gt;Karl Shifflet&lt;/a&gt;, recentemente entrato a far parte del team di Cider, ha realizzato una &lt;a target="_blank" href="http://karlshifflett.wordpress.com/2008/08/31/xaml-power-toys/"&gt;serie di PowerToys&lt;/a&gt; con lo scopo di migliorare alcune delle (molte) aree scoperte dal designer per WPF di Visual Studio 2008.&lt;br /&gt;
Le principali caratteristiche sono:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Group Into-Permette di selezionare un gruppo di controlli e raggrupparli in un nuovo parent&lt;/li&gt;
    &lt;li&gt;Remove Margins-Rimuove i margini da uno o piu' controlli&lt;/li&gt;
    &lt;li&gt;Create Business Form-Permette di creare velocemente un form di immissione dati&lt;/li&gt;
    &lt;li&gt;Edit Grid-Permette di editare righe e colonne di ua griglia&lt;/li&gt;
    &lt;li&gt;Create Business Form for Class-Crea un form di immissione dati partendo dalla business class&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mi auguro che l'ingresso di Karl nel team contribuisca a far crescere un prodotto tanto interessante, quanto immaturo, qual'e' Cider.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93891.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/09/01/xaml-power-toys.aspx</guid>
            <pubDate>Mon, 01 Sep 2008 08:14:44 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/09/01/xaml-power-toys.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93891.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/09/01/xaml-power-toys.aspx</feedburner:origLink></item>
        <item>
            <title>.NET Framework: Le dimensioni contano&amp;hellip;</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/373655697/.net-framework-le-dimensioni-contanohellip.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Effettivamente c’è molta confusione sulle dimensioni reali del .NET Framework…, l’unica certezza è che, versione dopo versione, le dimensioni aumentano e, allo stato attuale, le dimensioni &lt;em&gt;sembrerebbero&lt;/em&gt; circa 200 MB.    &lt;br /&gt;In realtà non è proprio così, o almeno non è vero che per installare da zero il .NET Framework SP1 sia necessario scaricarsi tutti i 200 MB.    &lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/SmallestDotNetOnTheSizeOfTheNETFramework.aspx"&gt;Questo post&lt;/a&gt; di Scott Hanselman chiarisce ogni dubbio e, se volete capire quanti MB dovete scaricare per aggiornare una qualsiasi macchina, potete andare su &lt;a href="http://www.smallestdotnet.com"&gt;www.smallestdotnet.com&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b7b1a1d3-82a0-4af1-8e8c-59db12cfd4a8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET+Framework" rel="tag"&gt;.NET Framework&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93804.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/08/24/.net-framework-le-dimensioni-contanohellip.aspx</guid>
            <pubDate>Sun, 24 Aug 2008 19:42:44 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/08/24/.net-framework-le-dimensioni-contanohellip.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93804.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/08/24/.net-framework-le-dimensioni-contanohellip.aspx</feedburner:origLink></item>
        <item>
            <title>Reflector passa a Red-Gate</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/369792739/reflector-passa-a-red-gate.aspx</link>
            <description>&lt;p&gt;Il tool per .NET più famoso della terra abbandona il suo papà storico &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder&lt;/a&gt; e passa al gruppo &lt;a href="http://www.red-gate.com/"&gt;Red-Gate&lt;/a&gt;, la buona notizie è che in ogni caso, il tool rimarrà free.&lt;/p&gt;  &lt;p&gt;Fonte: &lt;a href="http://www.simple-talk.com/reflector/interview.htm"&gt;The future of .NET Reflector&lt;/a&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:411cf834-2fad-424c-99f6-bf487e0e2a27" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET+Reflector" rel="tag"&gt;.NET Reflector&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93754.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/08/20/reflector-passa-a-red-gate.aspx</guid>
            <pubDate>Wed, 20 Aug 2008 08:35:06 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/08/20/reflector-passa-a-red-gate.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93754.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/08/20/reflector-passa-a-red-gate.aspx</feedburner:origLink></item>
        <item>
            <title>WPF Text Clarity</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/369340016/93752.aspx</link>
            <description>&lt;p&gt;Una delle maggiori lamentele rivolte a WPF riguarda il rendering del testo, sopratutto in caso di piccole dimensioni dove il testo appare effettivamente leggermente “sfuocato” rispetto alla controparte GDI+   &lt;br /&gt;Se siete curiosi di capire il perchè di questo problema ed eventualmente come ‘mitigarlo’ leggete questo &lt;a href="http://windowsclient.net/wpf/white-papers/wpftextclarity.aspx"&gt;articolo&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ac911640-9e5f-4c03-88f6-33e39b06a861" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/WPF+Text+Clarity" rel="tag"&gt;WPF Text Clarity&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93752.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93752.aspx</guid>
            <pubDate>Tue, 19 Aug 2008 20:35:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93752.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93752.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93752.aspx</feedburner:origLink></item>
        <item>
            <title>Client Profile Deployment Survival Guide</title>
            <link>http://feeds.feedburner.com/~r/corrado/~3/369133312/93750.aspx</link>
            <description>&lt;p&gt;Se avete intenzione di utilizzare la nuova modalità di distribuzione &lt;a href="http://msdn.microsoft.com/en-us/library/cc160716.aspx"&gt;Client Profile&lt;/a&gt; e sopratutto volete ridistribuire il Client Framework insieme alla vostra applicazione, non perdetevi questo &lt;a href="http://download.microsoft.com/download/5/a/a/5aa86d6c-969b-42d8-bc6b-30e02bfeccf0/NETFXClientProfile_DeploymentGuide.htm"&gt;link&lt;/a&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:76856df6-0b16-4f30-9d9c-585c8de5e12b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Client+Profile+Deployment" rel="tag"&gt;Client Profile Deployment&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/corrado/aggbug/93750.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Corrado Cavalli</dc:creator>
            <guid isPermaLink="false">http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93750.aspx</guid>
            <pubDate>Tue, 19 Aug 2008 15:45:05 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93750.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/corrado/comments/commentRss/93750.aspx</wfw:commentRss>
        <feedburner:origLink>http://blogs.ugidotnet.org/corrado/archive/2008/08/19/93750.aspx</feedburner:origLink></item>
    </channel>
</rss>
