avatar
Today is Friday
October 18, 2019

Search Results Archives: March 2006

March 28, 2006

WebParts met een custom PersonalizationProvider

by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

WebParts is één van de nieuwe onderdelen van Visual Studio 2005. Het leek mij leuk om eens te experimenteren met WebParts. Echter de hosting provider waar ik een WebPart enabled website neer zou kunnen zetten ondersteund geen SQL Server. …en zo begonnen de problemen want default heeft het WebParts onderdeel SQL Server nodig voor het persisteren van persoonlijke gegevens en dat gaat geheel automatisch. WebParts voorziet namelijk in de mogelijkheid om onderdelen van een webpagina op een voor een gebruiker zelf te kiezen plek neer te zetten en in of uit te schakelen. Kijk voor een eerste indruk eens op start.com. Start.com is een initiatief van Microsoft gebaseerd op WebParts en AJAX (Atlas).

Ik wil beginnen met het opzetten van een WebPart enabled ASP.NET website. Op mijn systeem heb ik geen SQL Server geinstalleerd zodat ik zeker weet dat er door ASP.NET niet toch (stiekem) gebruik van wordt gemaakt voor het persisteren van gegevens. Heb je zelf wel SQL Server Express Edition of 2005 draaien dan kun je tijdelijk de service uitschakelen via Control Panel > Administrative Tools > Services.

  • Start Visual Studio 2005
  • Kies File > New > Web Site > ASP.NET Web Site
  • Geef de nieuwe site de naam “WebPartsTest”.
  • Open het bestand default.aspx in design mode.
  • Open in de toolbox (linkerkant) de WebPart tab
  • Plaats een WebPartManager op de pagina.
  • De WebPartManager beheerd alle WebPart controls op een pagina. Er is ook maar 1 WebPartManager noodzakelijk op een pagina.

    Voeg een stylesheet toe met de naam main.css. Je gaat als volgt te werk.

  • Selecteer het WebPartTest project in de Solution Explorer.
  • Klik op de rechtermuisknop en selecteer Add New Item en kies “Style Sheet” en geef hem de naam “main.css”.
  • Vervang de inhoud met de volgende gegevens:
  • <code>.col1
    {
    	background-color: blue;
    	width: 200px;
    	height: 200px;
    	float: left;
    }
    .col2
    {
    	background-color: gray;
    	width: 200px;
    	height: 200px;
    	float: left;
    }
    .col3
    {
    	background-color: white;
    	width: 200px;
    	height: 200px;
    	float: left;
    }</code>
  • Open de default.aspx pagina in design mode en sleep de main.css stylesheet op de pagina. In de header van de pagina is nu de stylesheet toegevoegd.
  • Open de default.aspx pagina in source mode en voeg de volgende code toe tussen de div-elementen binnen het form element en na de WebPartManager:
  • <code>
        <div class="col1"></div><br />
        <div class="col2"></div><br />
        <div class="col3"></div><br /></code>

    Open de pagina in design mode en plaats in zowel het blauwe en grijze vlak een WebPartZone.

  • Plaats in het witte vlak een DropDownList en geef deze de naam “DisplayModeDropdown”.
  • Zet de AutoPostBack property van de dropdown op true.
  • Plaats in WebPartZone1 een Calendar control
  • Plaats in WebPartZone2 een Textbox
  • Voeg de volgende code toe aan de code behind van default.aspx pagina:

  • protected void Page_Init(object sender, EventArgs e)
        {
            DisplayModeDropdown.Items.Clear();
            foreach (WebPartDisplayMode mode in WebPartManager1.SupportedDisplayModes)
            {
              
                string modeName = mode.Name;
                if (mode.IsEnabled(WebPartManager1))
                {
                    ListItem item = new ListItem(modeName, modeName);
                    DisplayModeDropdown.Items.Add(item);
                }
            }
        }

        protected void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
        {
            String selectedMode = DisplayModeDropdown.SelectedValue;
            WebPartDisplayMode mode = WebPartManager1.SupportedDisplayModes[selectedMode];
            if (mode != null)
                WebPartManager1.DisplayMode = mode;
        }

  • Koppel het SelectedIndexChange event van de DisplayModeDropdown aan het in de codebehind geplaatste eventcode via het properties window.
  • Start de ASP.NET web applicatie
  • Het zal nu enige tijd duren voor de applicatie echt start, met de volgende foutmelding (als de SQL Server service is uitgeschakeld of niet geinstalleerd).

    An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)
    WebPart11.gif

    Je ziet nu dat .NET via de SQLPersonalizationProvider gepersonaliseerde gegevens probeert op te halen over de WebParts die op de pagina staan. Aangezien SQL Server niet aanwezig is kan er niet automatisch een database voor deze gegevens worden aangemaakt.

    De custom PersonalizationProvider
    Om de boel toch aan de praat te krijgen zijn er 2 mogelijkheden. Het installeren of starten van SQL Server of het maken van een eigen PersonalizationProvider. Dit laatste wil ik hier laten zien. Omdat ik niet wist hoe te beginnen heb ik zelf het web maar eens afgezocht op een custom PersonalizationProvider. Vooralsnog bestaan deze niet dus ik was aangewezen op mijzelf. Voorbeelden zijn er overigens ook niet te vinden over hoe een PersonalizationProvider te bouwen. Uiteindelijk na wat vogelen de oplossing, het resultaat een FileSystemPersonalizationProvider. Deze provider persisteert gepersonaliseerde WebPart gegevens op het filesysteem.

    Als eerste moet er aan de solution een nieuw project worden toegevoegd.

  • Selecteer de solution in de Solution Explorer en kies Add > New Project > Class Library en noem deze snoei.net.webparts
  • Voeg een referentie toe aan de class library naar System.Web en System.Configuration.
  • Maak een class aan met de naam FileSystemPersonalizationProvider en zorgen dat deze overerft van PersonalizationProvider.
  • Voeg de volgende regels toe bovenin de class:
  • using System.Web.UI.WebControls.WebParts;
    using System.Configuration;
    using System.IO;

    Je kunt hier overigens de volledige code downloaden.

    Bovenin de FileSystemPersonalizationProvider heb ik een static string opgenomen naar een pad waar de gepersonaliseerde gegevens mogen worden weggeschreven en worden opgehaald:

    private static string PersonalizationPath = @"C:\Documents and Settings\snoei\My Documents\Visual Studio 2005\WebSites\WebParts\App_Data\personalization\";

    De belangrijkste verplicht te implementeren methodes die ik heb uitgewerkt om de boel draaiend te krijgen zijn:

  • SavePersonalizationBlob – Sla gepersonaliseerde gegevens op
  • LoadPersonalizationBlobs – Laad gepersonaliseerde gegevens
  • ResetPersonalizationBlob – Verwijder gepersonaliseerde gegevens
  • Op basis van het WebPartManager ID, gebruikersnaam en het path van de webpagina met webparts zijn de sleutel om vast te stellen welke gegevens voor wie moeten worden opgehaald. Uiteindelijk bleek het dus vrij simpel om een custom PersonalizationProvider te schrijven. Overigens zou een aantal functies ook nog moeten worden geimplementeerd. Deze Provider is dus verre van stabiel te noemen het gaat echter om het idee. Voor de WebPart applicatie die we nu hebben is deze provider voldoende.

    We hebben echter nog een probleem. De WebPartManager op onze default.aspx pagina moet gebruik gaan maken van de nieuwe Provider. Je gaat alsvolgt te werk:

  • Voeg een referentie toe in het Web Site project naar de zojuist aangemaakte class library.
  • Open de web.config en voeg het volgende toe:

  • <webParts>
          <personalization>
            <providers>
              <!--clear/-->
              <add name="FSPP" type="snoei.net.webparts.FileSystemPersonalizationProvider, snoei.net.webparts"/>
            </providers>
          </personalization>
        </webParts>

    Hiermee geven we aan dat we een specifieke PersonalizationProvider gebruiken, waar die kan worden gevonden en welke naam hij heeft.

  • In de property “Personalization” “ProviderName” van WebPartManager1 geven de waarde “FSPP” mee.
  • Start de applicatie.
  • WebPart2.gif
    De dropdown geeft nu de keuze tussen “browse” en “design”. In design mode kunnen WebParts worden verplaatst van ene naar de andere zone. Alle wijzigingen aan de layout worden vervolgens op het filesysteem opgeslagen. Voila, het klusje is geklaard. Nogmaals, de FileSystemPersonalizationProvider bevat een voorzet en is verre van compleet. Beter zou natuurlijk zijn om een MySQLPersonalizationProvider te bouwen of iets dergelijks. Eerlijk gezegd verwacht ik dat daar binnenkort wel iemand mee op de proppen komt.

    Ik hoop dat ik hiermee heb laten zien hoe makkelijk het is om ASP.NET te customizen.

    De source code: WebPartsTest.zip.

    March 19, 2006

    Naar het web via een lokale proxy

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Een website benaderen via de infrastructuur van de werkgever is meestal niet zo’n heel groot probleem. Bij de klant waar ik op dit moment werkzaam ben had ik tot voor kort echter een vervelend probleempje. Bij het opstarten van mijn browser maakt deze contact met de proxy server via NTLM autorisatie. Dat betekent in dit specifieke geval dat er niet alleen een username, password aan de proxy server moet worden doorgegeven maar ook een domein. Internet Explorer ondersteund NTLM dus dat is niet echt een probleem. Vervelend is wel, maar niet onoverkomelijk, dat elke keer bij het opstarten van de browser om een gebruikersnaam, wachtwoord en domeinnaam wordt gevraagd om met de proxy server te kunnen verbinden.

    Nu bedacht ik mij onlangs dat RSS-feeds lezen toch wel heel handig zou zijn tijdens mijn werk. Er zijn echter nauwelijks RSS readers die NTLM autorisatie ondersteunen. De enige die ik kon vinden was Pluck die zichzelf integreerd in de browser. In Pluck is het mogelijk om bij de username ook een domein op te geven dus “domein\username”. Persoonlijk vind ik de gebruikersinterface niet niet heel handig bovendien crashte hij al binnen 5 minuten. Tja, wat nu?

    Een alerte collega attendeerde mij op de NTLM proxy van Dmitry Rozmanov. Dit is een in Python geschreven proxy server die lokaal draaien. Je hoeft er niet heel veel voor te doen. Python moet worden geinstalleerd en de NTLM proxy moeten worden neergezet en geconfigureerd. In het config bestand van de proxy kunnen de parent proxy gegevens worden ingevoerd en de poort waarop de lokale proxy moet draaien kan worden aangegeven. Daarna moet de browser gebruik gaan maken van deze nieuwe proxy om te zorgen dat het vervelende inlog scherm voor de proxy server verdwijnt. Vervolgens kan elke RSS reader gebruik gaan maken van deze nieuwe lokale proxy om feeds op te halen. Toepassingen zijn legio, zo kan bijvoorbeeld ook gebruik worden gemaakt van webservices etc…

    Hieronder vindt je een stappenplan voor het installeren van de NTLM proxy in de bovengenoemde situatie.

  • Download de laatste versie van Python via www.python.org.
  • Installeer Python en onthoud het pad waar Python wordt geinstalleerd, die is zodadelijk nodig voor de configuratie van de NTLM Authorization Proxy Server (APS).
  • Download hier de NTLM APS.
  • Open het bestand runserver.bat dat in de NTLM APS directory aanwezig is.
  • Pas de volgende regel aan (indien nodig) zodat deze verwijst naar de python executable:
  • @echo off
    "C:\Python24\python.exe" main.py

  • Open het bestand server.cfg en pas de volgende sleutels aan:
  • LISTEN_PORT = de poort waarop de lokale server bereikbaar moet zijn. Deze waarde kan zelf worden gekozen. Kies in iedergeval een poortnummer boven de 1024.
  • PARENT_PROXY = het ip-address van de originele proxy server
  • PARENT_PROXY_PORT = de poort waar
  • op de originele proxy draait.
  • ALLOW_EXTERNAL_CLIENTS = 1 als je de proxy wilt delen met andere pc’s, anders 0
  • NT_HOSTNAME = Domeinnaam voor autorisatie op de originele proxy
  • USER = Gebruikersnaam voor autorisatie op de originele proxy
  • PASSWORD = Wachtwoord voor autorisatie op de originele proxy
  • Vervolgens kan de server nu worden gestart door runserver.bat op te starten
  • Bij succesvol starten van de server zal er een console applicatie worden gestart met de informatie die ongeveer overeenkomt met onderstaande gegevens:

    NTLM authorization Proxy Server v0.9.9.0.1
    Copyright (C) 2001-2004 by Dmitry Rozmanov and others.
    Now listening at MYPC on port 6080

  • Pas in de browser en alle andere applicaties die hiervan gebruikt gaan maken de proxy settings zodanig aan dat deze kijkt naar de lokale proxy. Dus het proxy address is 127.0.0.1 of “localhost” en de poort is de waarde die is ingevoerd bij LISTEN_PORT in de server.cfg van NTLM APS.
  • Voila, je eigen lokale proxy is in de lucht, de autorisatie wordt automatisch geregeld. Alle applicaties met proxy ondersteuning kunnen nu het internet op. Let wel op dat de server.cfg niet in verkeerde handen valt aangezien daarin de proxy credentials zijn opgenomen.

    March 14, 2006

    Scott Guthrie’s DevDays 2006 Atlas presentatie

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Gisteren plaatste Scott slides en demo’s van de Atlas presentatie op DevDays 2006. Je kunt ze vinden onder http://weblogs.asp.net/scottgu/archive/2006/03/12/440068.aspx

    AJAX in 1 minuut met Atlas voor ASP.NET 2.0

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    7 maart 2006 was ik op de developer days. Weer heel interessant. Scott Guthrie gaf hier een fantastische demo van Atlas. Scott liet zien hoe makkelijk je Atlas implementeerd in je eigen website. Bij deze een tutorial.

    • Download en installeer de Atlas.vsi.
    • Start Visual Studio 2005.
    • File > New > Website.
    • Kies ASP.NET ‘Atlas’ website.

    Er wordt nu een Atlas website aangemaakt. Wat er eigenlijke gebeurd is dat er een gewone ASP.NET website wordt aangemaakt met extra een referentie naar de atlas dll en een directory scriptlibrary waarin de javascripts zijn opgenomen die de AJAX afhandeling voor rekening nemen. Verder is de inhoud van default.aspx iets anders als bij een normale ASP.NET website. De volgende code (html) is extra opgenomen:

    <atlas:ScriptManager ID="ScriptManager1" runat="server" />

    en..

    <script type="text/xml-script">
            <page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
                <references>
                </references>
                <components>
                </components>
            </page>
    </script>

    In de bovenste regel wordt de scriptmanager in de pagina geplaatst. Deze zorgt voor de juiste afhandeling van de AJAX calls.

    Om het leven wat aangenamer te maken gaan we nu de beschikbare Atlas controls (die zijn er, zoals de scriptmanager) toevoegen aan de toolbox. Doe het volgende:

    • Klik met rechtermuisknop op de toolbox
    • Add Tab
    • Geef de nieuwe tab de naam ‘Atlas’.
    • Vervolgens weer met de rechtermuisknop op de nieuwe tab Choose Items.
    • Browse en selecteer de ‘Microsoft.Web.Atlas.dll’ uit de bin directory van de website die je net hebt aangemaakt. (deze is te vinden in My Documents/Visual Studio 2005/Websites/JouwWebsiteProjectNaam/Bin).

    Na deze actie zijn alle controls die beschikbaar zijn voor Atlas in de Atlas tab van je toolbox terecht gekomen. We kunnen de nu beschikbare controls makkelijk op een webpagina slepen. Het gemak dient de mens.

    • Sleep een label op de default.aspx pagina en noem deze “Label1″.
    • Selecteer in de (nieuwe) “Atlas tab” van de toolbox een UpdatePanel en sleep deze op de default.aspx pagina.
    • Sleep een label in de UpdatePanel en noem deze “Label2″.
    • Sleep een button in de UpdatePanel en noem deze “Button1″.
    • Zet EnablePartialRendering property van de ScriptManager op “true”.
    • Voeg de volgende code toe in de codebehind van de default.aspx pagina:

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now.ToString();
        Label2.Text = DateTime.Now.ToString();
        Button1.Text = "Partial AJAX Refresh";
    }

    • Start de applicatie.

    Je zult nu zien dat bij het klikken op de button de tijd in de updatepanel wordt geupdate maar niet degene die buiten het panel staat. Er wordt nu dus alleen het deel wat in de updatepanel zit ge-update. De pagina wordt niet meer opnieuw geladen.

    Kortom, AJAX op zijn makkelijkst. Er is feitelijk geen regel code noodzakelijk om je ASP.NET 2.0 pagina’s AJAX enabled te maken. 

    Meer over Atlas:

    March 12, 2006

    Developer Days 2006

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Nog niet zo lang geleden waren de Developer Days er weer, 7 en 8 maart wel te verstaan. Tegenwoordig is het wel een erg massaal gebeuren. Het Auditorium van RAI Amsterdam zat tijdens de keynote dan ook tot de nok toe gevuld. Ik vindt dat een beetje jammer het mag van mij wel wat kleinschaliger. Dat zit er voorlopig waarschijnlijk niet in aangezien elke werkgever op dit moment om .NET mensen staat te springen zullen er vermoedelijk in de nabije toekomst alleen maar meer .NET professionals bijkomen.

    Afgezien van de drukte was het wel weer erg interessant. Atlas kwam aan bod, de Microsoft implementatie van AJAX. Werkelijk een hele slimme doordachte oplossing voor AJAX in ASP.NET. In een paar muisklikken heb je je eigen AJAX site, er komt geen enkele javascript of andere code bij om de hoek kijken. WinFX de nieuwe Windows API’s van Vista met daarin onder andere Windows Presentation Foundation (voorheen Avalon), Windows Workflow Foundation en Windows Communication Foundation (voorheen “Indigo”). Verder bezocht ik een sessie van Ordina (mijn vorige werkgever) over Domain Specific Languages. Bij de laatstgenoemde sessie zaten we met vier man, dat maakte de informatie echter niet minder interessant. Domain Specific Languages moet de brug gaan slaan tussen klant en ontwikkelaar, verder zou het voor een versnelling moeten gaan zorgen van een software ontwikkelingstraject en is dan ook prima toepasbaar in een software factory. Daarnaast moet het de vrijheden van ontwikkelaars een beetje in gaan tomen. DSL’s zal onze toekomst wel eens flink kunnen gaan veranderen en ongetwijfeld verbeteren. Een soort industrialisering van de software ontwikkeling.

    Al met al een boeiende dag, geen spijt dat ik ben gegaan. Genoemde thema’s zullen ongetwijfeld binnenkort op mijn blog terug gaan komen.

    Welkom!

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Pasfoto TonHet is dan zover. Eindelijk m’n eigen blog. Het is de bedoeling dat ik hier wat neerpen over het deel van mijn leven dat ik doorga als software developer/designer (…en dat is een groot deel want het is zowel mijn werk als mijn hobby). Ik hoop in de nabije toekomst in te gaan op nieuwe Microsoft technologieen met name degene die een relatie hebben met .NET. Zoals WinFX, Atlas, Domain Specific Languages(DSL), Microsoft Solution Framework (MSF) etc…

    Ik wens ieder veel leesplezier, mezelf veel schrijfplezier en… geef commentaar!

    About

    by blog — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Mijn naam is Ton Snoei. Ik ben werkzaam als architect/software engineer bij een bekende telecom onderneming.

    In mijn vrije tijd houd ik mij vaak bezig met het uitzoeken van en lezen over allerlei (nieuwe) Microsoft technologieen. Mijn ervaringen wil ik hier met je delen.

    Ik ben bereikbaar via blog@snoei.net.

    © 2019 Snoei's .NET blog All rights reserved - Wallow theme v0.44 by ([][]) TwoBeers - Powered by WordPress - Have fun!