<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>Tutorials</title>
        <link>http://blogs.ugidotnet.org/dsenatore/category/2055.aspx</link>
        <description>Tutorials</description>
        <language>it-IT</language>
        <copyright>Davide Senatore</copyright>
        <managingEditor>info@codesapiens.net</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Scrivere un control class converter per VB6(2)XAML</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2006/11/29/57910.aspx</link>
            <description>&lt;p&gt;Per tutti coloro i quali sono interessati all'utilizzo ed alla personalizzazione del tools &lt;a href="http://blogs.ugidotnet.org/dsenatore/archive/2006/11/26/57347.aspx"&gt;VB6(2)XAML&lt;/a&gt;, pubblico un esempio di come possa essere possibile ridefinire il rendering dell'elemento VB.Label con una classe proprietaria. Dopo aver creato un progetto di tipo ClassLibrary, possiamo aggiungere la referenza a VB62XAML.exe nella quale si trova la classe VBControl, dalla quale dovremo ereditare.&lt;/p&gt; &lt;p&gt;Implementando un override del metodo RenderToWPF possiamo definire come renderizzare il nostro controllo Label. Nell'esempio che ho riportato sotto, è possibile osservare una tecnica basata sulla creazione "manuale" degli elementi, ed un'altra basata sull'utilizzo di templates che magari possono essere caricati da disco.&lt;/p&gt; &lt;div style="border-right: black 1px solid; padding-right: 5px; border-top: black 1px solid; padding-left: 5px; padding-bottom: 5px; overflow: auto; border-left: black 1px solid; width: 600px; padding-top: 5px; border-bottom: black 1px solid; height: 300px; background-color: gainsboro"&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Imports&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;System.Xml&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Imports&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;CodeSapiens.VB62XAML&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Public&amp;nbsp;Class&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;MyLabel&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Inherits&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;CodeSapiens.VB62XAML.VBControl&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'''&amp;nbsp;&amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&amp;nbsp;Override&amp;nbsp;base&amp;nbsp;function&amp;nbsp;RenderToWPF&amp;nbsp;and&amp;nbsp;replace&amp;nbsp;with&amp;nbsp;new&amp;nbsp;rendering&amp;nbsp;attributes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&amp;nbsp;&amp;lt;param&amp;nbsp;name="document"&amp;gt;The&amp;nbsp;XML&amp;nbsp;document&amp;nbsp;that&amp;nbsp;parser&amp;nbsp;passes&amp;nbsp;to&amp;nbsp;classes&amp;lt;/param&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&amp;nbsp;&amp;lt;returns&amp;gt;XMLElement&amp;nbsp;representing&amp;nbsp;the&amp;nbsp;control&amp;nbsp;in&amp;nbsp;XML&amp;nbsp;Format&amp;lt;/returns&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&amp;nbsp;&amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Public&amp;nbsp;Overrides&amp;nbsp;Function&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;RenderToWPF(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;ByVal&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;document&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;As&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;System.Xml.XmlDocument)&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;As&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;System.Xml.XmlElement&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'Create&amp;nbsp;element&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Dim&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_item&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;As&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;XmlElement&amp;nbsp;=&amp;nbsp;document.CreateElement("Label")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'Set&amp;nbsp;base&amp;nbsp;positioning&amp;nbsp;attributes&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_item.SetAttribute("Name",&amp;nbsp;Helpers.BuildName(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Name,&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Canvas.Left",&amp;nbsp;Helpers.TwipsToPixels(Convert.ToInt32(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Left").Value)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Canvas.Top",&amp;nbsp;Helpers.TwipsToPixels(Convert.ToInt32(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Top").Value)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Width",&amp;nbsp;Helpers.TwipsToPixels(Convert.ToInt32(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Width").Value)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Height",&amp;nbsp;Helpers.TwipsToPixels(Convert.ToInt32(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Height").Value)))&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Content",&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Caption").Value)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.SetAttribute("Padding",&amp;nbsp;"0,0,0,0")&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'Create&amp;nbsp;a&amp;nbsp;document&amp;nbsp;fragment&amp;nbsp;to&amp;nbsp;show&amp;nbsp;another&amp;nbsp;manner&amp;nbsp;of&amp;nbsp;embedding&amp;nbsp;XML&amp;nbsp;in&amp;nbsp;Control&amp;nbsp;Rendering&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Dim&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_docFrag&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;As&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;XmlDocumentFragment&amp;nbsp;=&amp;nbsp;document.CreateDocumentFragment()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Dim&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_gradientTemplate&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;As&amp;nbsp;String&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;String&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Empty&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'&amp;nbsp;This&amp;nbsp;string&amp;nbsp;could&amp;nbsp;be&amp;nbsp;loaded&amp;nbsp;from&amp;nbsp;disk,&amp;nbsp;and&amp;nbsp;maybe&amp;nbsp;values&amp;nbsp;could&amp;nbsp;be&amp;nbsp;placeholders&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&amp;nbsp;so&amp;nbsp;we&amp;nbsp;can&amp;nbsp;substitute&amp;nbsp;them&amp;nbsp;at&amp;nbsp;run-time&amp;nbsp;using&amp;nbsp;our&amp;nbsp;special&amp;nbsp;values...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_gradientTemplate&amp;nbsp;=&amp;nbsp;"&amp;lt;Label.Background&amp;gt;"&amp;nbsp;&amp;amp;&amp;nbsp;_&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;LinearGradientBrush&amp;nbsp;StartPoint=""0.5,0""&amp;nbsp;EndPoint=""0.5,1""&amp;gt;"&amp;nbsp;&amp;amp;&amp;nbsp;_&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;GradientStop&amp;nbsp;Offset=""0.0""&amp;nbsp;Color=""LightBlue""/&amp;gt;"&amp;nbsp;&amp;amp;&amp;nbsp;_&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;GradientStop&amp;nbsp;Offset=""1.0""&amp;nbsp;Color=""SlateBlue""/&amp;gt;"&amp;nbsp;&amp;amp;&amp;nbsp;_&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/LinearGradientBrush&amp;gt;"&amp;nbsp;&amp;amp;&amp;nbsp;_&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&amp;lt;/Label.Background&amp;gt;"&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_docFrag.InnerXml&amp;nbsp;=&amp;nbsp;_gradientTemplate&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_item.AppendChild(_docFrag)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;'Handle&amp;nbsp;font&amp;nbsp;generation&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;If&amp;nbsp;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.ContainsProperty("Font")&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.RenderFont(&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;Me&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;.Properties.GetProperty("Font"),&amp;nbsp;_item)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;End&amp;nbsp;If&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #000000; font-family: courier new"&gt;_item&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;End&amp;nbsp;Function&lt;br&gt;&lt;br&gt;End&amp;nbsp;Class&lt;br&gt;&lt;/div&gt; &lt;p&gt;&lt;/span&gt;Uno dei punti fondamentali, comunque, è rappresentato dalla "dichiarazione" fatta nel file .config dell'applicazione, del class converter che utilizzerà il controllo Label:&lt;/p&gt; &lt;div style="border-right: black 1px solid; padding-right: 5px; border-top: black 1px solid; padding-left: 5px; padding-bottom: 5px; overflow: auto; border-left: black 1px solid; width: 600px; padding-top: 5px; border-bottom: black 1px solid; height: 50px; background-color: gainsboro"&gt;&lt;span style="font-size: 10pt; color: #008000; font-family: courier new"&gt;&amp;lt;!--&amp;lt;add&amp;nbsp;key="VB.Label"&amp;nbsp;value="VB62XAML,&amp;nbsp;CodeSapiens.VB62XAML.VBLabel"/&amp;gt;--&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;&amp;lt;add&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #ff0000; font-family: courier new"&gt;key&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;="VB.Label"&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #ff0000; font-family: courier new"&gt;value&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;="CustomControls,&amp;nbsp;CustomControls.MyLabel"&lt;/span&gt;&lt;span style="font-size: 10pt; color: #8b0000; font-family: courier new"&gt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: #0000ff; font-family: courier new"&gt;&amp;gt;&lt;br&gt;&lt;/div&gt;&lt;/span&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/57910.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2006/11/29/57910.aspx</guid>
            <pubDate>Wed, 29 Nov 2006 15:05:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/57910.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2006/11/29/57910.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/57910.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/57910.aspx</trackback:ping>
        </item>
        <item>
            <title>Articolo su WSE 3.0 e ASP.net Membership API</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2006/10/10/50780.aspx</link>
            <description>&lt;p&gt;Con mio grande piacere, oggi è stato pubblicato il mio ultimo articolo sul sito di &lt;a href="http://www.xedotnet.org/"&gt;XeDotNet&lt;/a&gt;. Nell'articolo in questione si parla di autenticazione ed autorizzazione tramite WSE 3.0 e Membership API. Grazie all'approccio trattato si può realizzare un sistema Single Sign On tra Web Services ed applicazioni ASP.net, condividendo l'identità dell'utente tra le varie applicazioni. Lo potete trovare &lt;a href="http://www.xedotnet.org/40/section.aspx/296"&gt;qui&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/50780.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2006/10/10/50780.aspx</guid>
            <pubDate>Tue, 10 Oct 2006 09:00:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/50780.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2006/10/10/50780.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/50780.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/50780.aspx</trackback:ping>
        </item>
        <item>
            <title>Single Sign-On con ASP.net 2.0 e Membership API</title>
            <link>http://blogs.ugidotnet.org/dsenatore/archive/2006/06/07/42459.aspx</link>
            <description>&lt;FONT face=Verdana size=2&gt;&lt;P&gt;Spesso mi è capitato di imbattermi nel problema di avere più applicazioni web che permettano agli stessi utenti di autenticarsi e di lavorare liberamente al loro interno. Ancora più spesso mi sono imbattuto nella difficoltà di realizzare tale obiettivo, soprattutto per via del fatto che ogni applicazione web implementava l'autenticazione a modo suo, con risultati spesso discutibili dal punto di vista della sicurezza.&lt;/P&gt;&lt;P&gt;Molte volte ci siamo trovati a valutare come sistema di Single Sign-On l'autenticazione su Active Directory, ma questa è fattibile soprattutto in ambienti intranet e non in un ambiente internet, dove magari i nostri utenti possono addirittura auto-registrarsi. &lt;/P&gt;&lt;P&gt;L'eleganza della Membership API permette di sorpassare ogni problema, raggiungendo l'obiettivo di condividere le credenziali dell'utente attraverso più applicazioni web. Ovvero si potrà, ad esempio, creare un'applicazione web dedicata alle vendite e, successivamente, un'applicazione web dedicata alla reportistica. Queste due applicazioni potranno condividere le informazioni relative agli&amp;nbsp;utenti ed ai loro ruoli, in modo da uniformare la gestione della sicurezza.&lt;/P&gt;&lt;P&gt;Ora, come implementare una feature così appetibile? Beh, vi assicuro che è più facile farlo che spiegarlo &lt;IMG height=19 src="http://www.imhoproject.org/files/allegro.gif" width=19 align=absMiddle border=0&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;...&lt;/P&gt;&lt;P&gt;Come prima cosa, dobbiamo evitare di usare il "classico" database SQL express che il buon vecchi VS2005 crea automaticamente per noi. Piuttosto, creiamo un database che fungerà da repository condiviso di credenziali (Shared Credential Repository, SCR), mediante il tool &lt;STRONG&gt;aspnet_regsql.exe&lt;/STRONG&gt;, che possiamo trovare nella directory %WINDOWS%\Microsoft.NET\Framework\v2.0.50727. Lasciando come &amp;lt;default&amp;gt; la selezione del database, creeremo un DB di nome &lt;STRONG&gt;ASPNETDB&lt;/STRONG&gt; nel nostro server SQL che potrà essere utilizzato per i nostri fini. A questo punto, visto che siamo nei paraggi, diamo un'occhiatina al file Machine.config che si trova nella sottodirectory CONFIG. Al suo interno possiamo trovare le seguenti parti "interessanti":&lt;/P&gt;&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: black 1px solid; WIDTH: 702px; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; HEIGHT: 200px; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;connectionStrings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="LocalSqlServer"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;connectionString&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="data&amp;nbsp;source=.\SQLEXPRESS;Integrated&amp;nbsp;Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User&amp;nbsp;Instance=true"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;providerName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="System.Data.SqlClient"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;connectionStrings&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;...snip...&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;membership&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;providers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="AspNetSqlMembershipProvider"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;type&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="System.Web.Security.SqlMembershipProvider,&amp;nbsp;System.Web,&amp;nbsp;Version=2.0.0.0,&amp;nbsp;Culture=neutral,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;PublicKeyToken&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;=b03f5f7f11d50a3a"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;connectionStringName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="LocalSqlServer"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;enablePasswordRetrieval&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="false"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;enablePasswordReset&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="true"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;requiresQuestionAndAnswer&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="true"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;applicationName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="/"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;requiresUniqueEmail&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="false"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;passwordFormat&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="Hashed"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;maxInvalidPasswordAttempts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="5"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;minRequiredPasswordLength&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="7"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;minRequiredNonalphanumericCharacters&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="1"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;passwordAttemptWindow&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="10"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;passwordStrengthRegularExpression&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;=""&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;providers&amp;gt;&lt;BR&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;membership&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;...snip...&lt;BR&gt;&lt;/DIV&gt;&lt;P&gt;&lt;FONT face=Verdana&gt;Il punto su cui ragionare, in vista delle nostre applicazioni, è la ConnectionString "LocalSqlServer" e come questa viene utilizzata dal provider &lt;EM&gt;AspNetSqlMembershipProvider&lt;/EM&gt;. Noi vogliamo mantenere questo provider senza apportare modifiche in ciascuna applicazione web, in modo che modificando il comportamento della membership all'interno del Machine.config, tutte le applicazioni installate sul nostro server beneficino del comportamento. Del resto è anche una questione di coerenza nelle policies di sicurezza, giusto? Preso atto di questo, creiamo una applicazione web di nome &lt;STRONG&gt;SalesApp&lt;/STRONG&gt;, aggiungiamo un paio di pagine Login.aspx e Register.aspx nelle quali aggiungiamo, rispettivamente, un controllo Login ed un controllo User Creation Wizard. Nella pagina&amp;nbsp;Default.aspx aggiungiamo un controllo LoginStatus e un controllo LoginName. Il pezzo forte di tutto questo, comunque è il file Web.config, che deve essere così composto:&lt;/FONT&gt;&lt;/P&gt;&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: black 1px solid; WIDTH: 702px; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; HEIGHT: 263px; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;?xml&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;version&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="1.0"?&amp;gt;&lt;BR&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appSettings&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;connectionStrings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;clear&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;&amp;lt;!--configure&amp;nbsp;Shared&amp;nbsp;Credential&amp;nbsp;Repository--&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;add&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="LocalSqlServer"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;connectionString&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="SERVER=MYSERVER;DATABASE=ASPNETDB;UID=sa;PWD=password"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;providerName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="System.Data.SqlClient"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;connectionStrings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;system.web&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;compilation&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;debug&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="false"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;strict&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="false"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;explicit&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="true"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;authentication&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;mode&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="Forms"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;&amp;lt;!--configure&amp;nbsp;authentication&amp;nbsp;element:&amp;nbsp;name,&amp;nbsp;path,&amp;nbsp;protection--&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;forms&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;=".SHAREDTOKEN"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;loginUrl&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="login.aspx"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;protection&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="All"&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;timeout&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="30"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;path&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="/"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;requireSSL&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;slidingExpiration&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="true"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;cookieless&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="UseCookies"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;authentication&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;&amp;lt;!--configure&amp;nbsp;machineKey.&amp;nbsp;Must&amp;nbsp;be&amp;nbsp;the&amp;nbsp;same&amp;nbsp;for&amp;nbsp;each&amp;nbsp;application!!--&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;machineKey&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;validationKey&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="95E209A1882F59B1585FD2691BB0AEF28E8158C1CD26EADA9B2B3CF8821F2D3D39347B487F72D94E438E4EE510A730FE979A3E79D18A5DB453FE87979D25AACC"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;decryptionKey&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="B753AE2B2CEAFD2BA6B938744ECD8550ECE5F6BB51506E43"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;validation&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="SHA1"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #008000; FONT-FAMILY: Courier New"&gt;&amp;lt;!--deny&amp;nbsp;access&amp;nbsp;to&amp;nbsp;unauthenticated&amp;nbsp;users--&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;lt;authorization&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;deny&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;users&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;="?"&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;authorization&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;system.web&amp;gt;&lt;BR&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New"&gt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;configuration&amp;gt;&lt;BR&gt;&lt;/DIV&gt;&lt;P&gt;&lt;FONT face=Verdana color=black&gt;Esaminiamo, dunque, questo file, fondamentale per il buon funzionamento della nostra "Shared-Membership"; ho modificato la stringa di connessione LocalSqlServer, in modo da farla puntare allo Shared Credential Repository creato in precedenza. Nell'elemento authentication si può vedere l'attibuto mode, impostato a Forms, ed all'interno, l'elemento forms configurato con un name, un path ed una protection ben definite. Dobbiamo fare attenzione a questi valori, perchè dovranno essere &lt;STRONG&gt;uguali&lt;/STRONG&gt; in ogni applicazione che vogliamo far entrare nella nostra Shared Membership (nel club, per intenderci...&lt;IMG height=19 src="http://www.imhoproject.org/files/occhiolino.gif" width=19 align=absMiddle border=0&gt;). Oltre a questa impostazione, un altro elemento deve essere identico in tutte le nostre web application, ed è l'elemento machineKey. I tre attributi validationKey, decryptionKey e validation devono essere identici sempre per tutte le web app del club. Per generare valori validi riferitevi a &lt;A title="" href="http://aspnetresources.com/tools/keycreator.aspx" target="" name=""&gt;MachineKey Generator&lt;/A&gt;. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=Verdana color=black&gt;A questo punto, il gioco è fatto! Per creare il primo utente, rimuovete il deny users="?" in modo da poter navigare la pagina register.aspx e create l'utente. Questo verrà creato all'interno del repository condiviso, e sarà a disposizione di tutte le applicazioni che utilizzeranno questo pattern di autenticazione condivisa. Ripristinando il deny users, la cosa simpatica è che se create un'applicazione di nome ReportApp, copiate il file web.config dalla SalesApp&amp;nbsp;alla ReportApp, create un link che dalla SalesApp punti alla ReportApp e vi autenticate nella SalesApp, una volta giunti alla ReportApp, questa vi "riconoscerà" e nella pagina di default comparirà il nome del vostro utente. Stiamo quindi lavorando con un utente in un'applicazione web, essendoci autenticati presso un'altra applicazione. Estremizzando, potremmo creare un'applicazione per l'autenticazione che rinvia ad altre applicazioni concrete che implementino le funzionalità desiderate. A &lt;A title="" href="http://www.codesapiens.net/LinkClick.aspx?link=SharedMembership.zip&amp;tabid=59&amp;mid=420" target="" name=""&gt;questo&lt;/A&gt; indirizzo potete trovare un semplice progetto con due applicazioni web per testare questa feature estremamente potente di ASP.net 2.0.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Nel caso in cui vogliate riportare le impostazioni del provider nel Web.Config, fate attenzione al nome dell'applicazione! Se volete condividere Membership Ruoli e Profili tra le applicazioni, dovete impostare l'attributo name allo stesso valore per ogni applicazione!&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face=Verdana color=black&gt;Happy authenticating!&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;FONT face=Verdana&gt;&lt;/FONT&gt;&lt;P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --&gt;
&lt;img src="http://blogs.ugidotnet.org/dsenatore/aggbug/42459.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Davide Senatore</dc:creator>
            <guid>http://blogs.ugidotnet.org/dsenatore/archive/2006/06/07/42459.aspx</guid>
            <pubDate>Wed, 07 Jun 2006 15:15:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/dsenatore/comments/42459.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/dsenatore/archive/2006/06/07/42459.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/dsenatore/comments/commentRss/42459.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/dsenatore/services/trackbacks/42459.aspx</trackback:ping>
        </item>
    </channel>
</rss>