Riprendendo il discorso lasciato in un mio precedente post, vediamo di creare una soluzione che ci faccia capire come i Dataset Distribuiti possano essere utilizzati per creare soluzioni che impieghino questa tecnica per l'accesso ai dati.
Lavoreremo con un Database di nome ECommerce. La struttura è volutamente molto semplice (solo 2 tabelle) perchè non è importante complicare lo schema del database per comprendere come il Dataset Distribuito possa essere utilizzato per i nostri fini. Le tabelle sono Order e OrderDetail, collegate con una relazione uno a molti.
Procediamo creando un progetto di nome CodeSapiens.DataAccess, in cui creeremo il nostro dataset di nome...
Per tutti coloro i quali sono interessati all'utilizzo ed alla personalizzazione del tools VB6(2)XAML, 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. 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. Imports System.XmlImports CodeSapiens.VB62XAMLPublic Class MyLabel Inherits CodeSapiens.VB62XAML.VBControl ''' <summary> ''' Override base function RenderToWPF and replace with new rendering attributes ''' </summary> ''' <param name="document">The XML document that parser passes to classes</param> ''' <returns>XMLElement representing the control in XML Format</returns> ''' <remarks></remarks> Public Overrides Function RenderToWPF(ByVal document As System.Xml.XmlDocument) As System.Xml.XmlElement 'Create element Dim _item As XmlElement = document.CreateElement("Label") 'Set base positioning attributes _item.SetAttribute("Name", Helpers.BuildName(Me.Name, Me.Properties)) _item.SetAttribute("Canvas.Left", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Left").Value))) _item.SetAttribute("Canvas.Top", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Top").Value))) _item.SetAttribute("Width", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Width").Value))) _item.SetAttribute("Height", Helpers.TwipsToPixels(Convert.ToInt32(Me.Properties.GetProperty("Height").Value))) _item.SetAttribute("Content", Me.Properties.GetProperty("Caption").Value) _item.SetAttribute("Padding", "0,0,0,0") 'Create a document fragment to show another manner of embedding XML in Control Rendering Dim _docFrag As XmlDocumentFragment = document.CreateDocumentFragment() Dim _gradientTemplate As String = String.Empty ' This string could be loaded from disk, and maybe values could be placeholders ' so we can substitute them at run-time using our special values... _gradientTemplate = "<Label.Background>" & _ " <LinearGradientBrush StartPoint=""0.5,0"" EndPoint=""0.5,1"">" & _ " <GradientStop Offset=""0.0"" Color=""LightBlue""/>" & _ " <GradientStop Offset=""1.0"" Color=""SlateBlue""/>" & _ " </LinearGradientBrush>" & _ "</Label.Background>" _docFrag.InnerXml = _gradientTemplate _item.AppendChild(_docFrag) 'Handle font generation If Me.Properties.ContainsProperty("Font") Then Me.RenderFont(Me.Properties.GetProperty("Font"), _item) End If Return _item End FunctionEnd Class...
Con mio grande piacere, oggi è stato pubblicato il mio ultimo articolo sul sito di XeDotNet. 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 qui.
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.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....