Navigatie

Contact

Send mail to the author(s) E-mail

View Richard Soeteman's profile on LinkedIn

RSS 2.0 | Atom 1.0 | CDF

Archief

Categorieën

Blogroll

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Sign In

Zoeken

# Monday, 02 July 2007
Monday, 02 July 2007 08:23:29 (GMT Daylight Time, UTC+01:00) ( ASP.NET )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Cheat sheets zijn echt handige hulpmiddelen om snel je informatie te vinden. Voor de ASP.Net AJAX Library zijn o.a. de volgende cheat sheets beschikbaar:

 

Comments [0] | | # 
# Monday, 21 May 2007
Monday, 21 May 2007 14:51:57 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Okay het is maandag, nooit mijn beste dag dus een vage foutmelding komt meestal op dit soort dagen voor. Zo ook vandaag. Ik heb een webservice draaien, hiervoor heb ik een proxy klasse gemaakt zodat ik hem vanuit code kan gebruiken. Tamelijk standaard allemaal. Deze service heb ik getest op meerdere servers en draaien perfect. Vanochtend kreeg ik een bugmelding dat de webservice op 1 server een foutmelding gaf. De volgende foutmelding wordt getoond  "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. "  

Eerst maar eens een SSL Site geconfigureerd in mijn lokale IIS, zodat ik dit probleem ook lokaal kan reproduceren en debuggen. Via deze link vind je de info hoe je dit snel kan doen. Toen ik mijn lokale site startte viel me direct op dat ik het beveiligingswaarschuwing dialoogscherm te zien kreeg.

Deze waarschuwing wordt uiteraard ook getoond als je de webservice opvraagt, hier moest het probleem wel ergens liggen. Eigenlijk wil kunnen opgeven dat ik standaard door wil gaan. M.a.w. ik vertrouw het certificaat van de website altijd. De allereerste post die ik over dit onderwerp tegenkwam was een blogpost van Jan Tielens.  De methode die hij beschrijft is obsolete in .NET 2.0. In .NET 2.0 moet je gebruik maken van de ServicePointManager.ServerCertificateValidationCallback Property. Feitelijk maak je een CallBack functie die wordt aangeroepen door de ServicePointManager wanneer een request via HTTPS wordt gedaan.

Onderstaand de callback in VB.Net. Deze retourneert altijd true. M.a.w. ik vertrouw het certificaat.

Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
        Return True
End Function

Onderstaande regel registreert de callback op ServicePointManager.

ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)

Wanneer verificatie van het certificaat vereist is wordt nu ValidateCertificate aangeroepen wat altijd true terug geeft en werkt de webservice nu op alle servers. Uiteindelijk toch nog een goede maandag

Comments [0] | | # 
# Friday, 18 May 2007
Friday, 18 May 2007 08:36:16 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Tijdens mijn presentatie op Code-Camp werd door Peter Schipper de vraag gesteld hoe je ervoor kon zorgen dat Update Panels tijdens het laden van het eerste request voor een pagina direct afgaan. Dit zodat de gebruiker ook tijdens het eerste request niet lang hoeft te wachten voordat de pagina geladen is. Het antwoord op deze vraag had ik niet direct paraat en met het antwoord "hier kom ik nog op terug" sloot ik mijn sessie af. Peter is hier echter verder mee gegaan en heeft hier een uitgebreide blogpost over geschreven die ik jullie niet wil onthouden. 

Naar blogpost "Preloading ASP.Net AJAX UpdatePanel"

Comments [0] | | # 
# Sunday, 13 May 2007
Sunday, 13 May 2007 18:18:39 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Code-camp is afgelopen. Ik vond het een zeer geslaagd evenement. Er waren zeer veel interessante sessies en ook de sfeer was perfect. Ik hoop dat de organisatie daar ook zo over denkt en volgend jaar weer een code-camp gaat organiseren.

Mijn sessie ging over ASP.Net AJAX Extensions. Hierbij nog even een paar belangrijke punten waar je rekening mee moet houden:

  • Er zijn twee manieren om delen van je pagina te updaten:
    1. Via een updatepanel
    2. Via webservices en Client Script(Javascript)
  • Updates via een updatepanel doorlopen wel de volledige Page Life Cycle.
  • In een Updateprogresscontrol kan je code plaatsen dat de postback annuleert. Dit stopt echter alleen het proces aan de client kant en houdt feitelijk alleen in dat de pagina update niet wordt uitgevoerd. De server-side verwerking wordt volledig uitgevoerd.

Downloads:

Comments [0] | | # 
# Friday, 20 April 2007
Friday, 20 April 2007 07:34:56 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Enkele weken geleden heb ik al eens geschreven over Code Camp. Inmiddels is de lijst met sessies bekend. Ook is inschrijven al niet meer mogelijk, het zit compleet vol.  Het beloofd dus een spectaculaire dag te gaan worden. Zelf zal ik een sessie gaan houden over ASP.NET AJAX. Verder zullen twee van mijn Detrio Collega's ook spreken op dit evenement, te weten:

Tot 12 Mei!!
Comments [0] | | # 
# Friday, 13 April 2007
Friday, 13 April 2007 14:19:56 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here



Google is voor mij de beste zoekmachine die bestaat, echter vind hij vaak niet relevante zoekresultaten of zijn het er te veel. Dit kan aan mijn manier van zoeken liggen, maar het kost me dus een hoop tijd om uit dit resultaat het meest relevante artikel te vinden. Ik gebruik Google 99% van de tijd beroepsmatig. Dit houdt in dat ik in die gevallen alleen geïnteresseerd ben in .NET gerelateerde onderwerpen.

Ik was dan ook zeer verrast toen ik vorige week naar .Net Rocks aan het luisteren was en kon horen dat Dan Appelman een .Net zoekmachine op basis van Google Custom Search had ontwikkeld.  De zoekmachine doorzoekt niet alle sites waar het woord .Net in voorkomt, maar alleen degene die zijn opgenomen in de lijst van sites waarvan bekend is dat de content goed is.  Met deze zoekmachine hebben we dus de kracht van Google zonder de overbodige zoekresultaten. Inmiddels gebruik ik Search.Net een goede week en ik ben er zeer tevreden over. Het scheelt me enorm veel tijd doordat ik alleen maar relevante en vooral correcte zoekresultaten te zien krijg.

Naar Search.Net
Comments [1] | | # 
# Sunday, 18 March 2007
Sunday, 18 March 2007 07:15:15 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Vaak wil je even snel een ASP.Net site via een webserver bekijken zonder dat je deze site in IIS wil aanmaken.  De webdevelopment server die met VS2005 meekomt is hier zeer geschikt voor. De site zal je dan normaliter wel via Visual Studio moeten openen. Hier liep ik vorige week tegenaan toen ik een nieuwe template voor mijn weblog wilde gebruiken en weer eens 5 minuten aan het configureren was.  Ik kwam er toen achter dat de webserver die Visual Studio 2005 gebruikt ook via de command line te benaderen is. Vanuit de Visual Studio 2005  Command Prompt start je deze middels "webdev.webserver.exe". Dit start de volgende dialog met de uitleg over de parameters die gebruikt kunnen worden.

webdev.webserver.exe Dialog

Wanneer ik daarna webdev.webserver.exe nogmaals startte op met de correcte parameters (webdev.webserver.exe /port:8080 /path:"d:\sites\richardsoeteman.net" /vpath:"/") werd de webserver inderdaad gestart. Het tray icoon is hiervan het bewijs. 


Vervolgens kon ik mijn weblog benaderen via http://localhost:8080/.  Dit werkt op zich al heel aardig, maar het vergt nog teveel inspanning. Je wilt eigenlijk elke website op schijf kunnen starten middels een rechtermuisklik op de folder. Daarom kwam ik op het idee om onderstaande registry aanpassing aan te brengen, zodat een rechtermuisklik op folder niveau de optie "Start WebServer Here" in het context menu beschikbaar heeft.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb]
@="Start Webserver Here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\OpenVSWeb\command]
@="C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\Webdev.WebServer.exe /port:8080 /path:\"%1\""

Wanneer ik  met bovenstaande registry aanpassing rechts klik op de folder d:\sites\richardsoeteman.net geeft deze onderstaand context menu weer.  Een muisklik op "Start Webserver Here" start webdev.webserver.exe zoals we eerder gedaan hebben. Echter wordt voor de parameter "/path" de geselecteerde folder gebruikt.

Comments [1] | | # 
# Saturday, 10 March 2007
Saturday, 10 March 2007 07:52:54 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Je bent een paar dagen ziek en dan gebeurt er altijd van alles. Zo ook deze week, waar bekend werd dat het eerste Nederlandse Code Camp georganiseerd gaat worden.  Voor degene die niet weten wat een Code Camp is, onderstaand een kopie van de Code Camp Manifesto 

The question is what makes a Code Camp?

The answer is actually simple. In order to use the official Code Camp name and banner follow these simple protocols.

  1. By and For the Developer Community

Code Camps are about the developer community at large. They are meant to be a place for developers to come and learn from their peers. Topics are always based on community interest and never determined by anyone other than the community.

  1. Always Free

Code Camps are always free for attendees.

  1. Community Developed Material

The success of the Code Camps is that they are based on community content. All content that is delivered is original. All presentation content must be provided completely (including code) without any restriction. If you have content you don’t want to share or provide to attendees then the Code Camp is not the place for you.

  1. No Fluff – only Code

Code Camps are about showing the code. Refer to rule #1 if you have any questions on this.

  1. Community Ownership

The most important element of the Code Camp is always the developer community. All are welcome to attend and speak and do so without expectation of payment or any other compensation other than their participation in the community.

  1. Never occur during work hours

We need to understand that many times people can’t leave work for a day or two to attend training or even seminars. The beauty of the Code Camp is that they always occur on weekends.

Dit eerste Nederlandse Code Camp gaat plaatsvinden op 12 Mei a.s. en wordt gehouden in het Microsoft Innovation Center te Barneveld. De organisatie van dit evenement is in handen van de Nederlandse gebruikersgroepen SDN, VBCentral en dotNed. Ik heb er nu al zin in.

Voor meer informatie en inschrijving ga je naar www.code-camp.nl

Comments [0] | | # 
# Wednesday, 24 January 2007
Wednesday, 24 January 2007 21:54:49 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Ik mag Pieter Joost bedanken voor het taggen. Nu mijn beurt om 5 dingen over mezelf te vertellen die je waarschijnlijk nog niet weet, hier gaan we:

  1. Ik ben begonnen met programmeren op mijn commodore 64. Deze had ik op 13 jarige leeftijd gekocht, nadat ik hier ruim een jaar voor had gespaard. Deze commodore heeft er niet alleen voor gezorgt dat ik op jonge leeftijd met programmeren in aanraking kwam, maar heeft er tevens voor gezorgd dat ik meerdere zomers met 30+ graden binnen zat.
  2. In 2003 ben ik getrouwd met Tamara. Een jaar later is onze dochter Marijn geboren. Niet normaal hoe snel ze groot wordt. Ik weet nog als de dag van gisteren dat ze geboren werd en volgend jaar gaat ze al naar school.
  3. Mijn muzieksmaak varieert van easy listening tot knalharde rock, met een uitschieter naar goede dance. Dit tot groot ongenoegen van de buren die af en toe verplicht mee moeten luisteren. Zoals bij de meeste mensen hangt dit van mijn stemming af. Wel verheug ik me al op het concert van Faithless op 18 april
  4. In mijn vrije tijd ben ik veelal aan het klussen. Dit doe ik niet alleen omdat ik het leuk vind, maar het is ook noodzaak. We hebben in 2002 een huis gekocht waar het een en ander aan moest gebeuren. Dit jaar is de zolder aan de beurt en dat is tevens het laatste wat moet gebeuren. Whoa wat ga ik doen met al die vrije tijd...
  5. Sinds 1999 werk ik in de internet industrie(ja ik heb de Internet Bubble meegemaakt), eerst ontwikkelen in classic(crappy) ASP en daarna ASP.NET, met een tussenpose waarin ik Tridion projecten heb moeten doen. Aan Tridion word ik liever niet herinnert.
    Sinds een jaar werk ik voor Detrio Consultancy B.V.  Daar heb ik de gelegenheid mijn (ASP).NET kennis verder uit te diepen. Dit wordt overigens ook aktief door het bedrijf gestimuleerd en dat vind ik prettig.

Nu is het mijn beurt om de volgende personen te taggen:

Comments [1] | | # 
# Tuesday, 19 December 2006
Tuesday, 19 December 2006 20:13:45 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Ik heb met tot afgelopen week vaak afgevraagd waarom ik ooit gebruik zou maken van CLR integratie in SQL Server 2005. Totdat ik een query zag waar een Regular Expression meer op zijn plaats was geweest. Regular Expressions kent T-SQL niet, maar middels CLR integratie is dit op te lossen.

In onderstaand voorbeeld is men vergeten emailadressen te valideren. Daardoor staan er foutief geformateerde emailadressen in de database. Middels het gebruik van een Regular Expression gaan we deze in de database opzoeken. Onderstaande afbeelding toont alle data in de contacts tabel.

Code

Onderstaande code bevat de functie IsValidEmailAdress. Deze functie wordt straks ook binnen SQL Server gebruikt om te controlleren of het een geldig emailadres betreft.  De code zelf maakt gebruik van een regular expression om te bepalen of het emailadres geldig is.

using System;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;

public class DatabaseFunctions
{
    [SqlFunction( DataAccess = DataAccessKind.None , IsDeterministic=true) ]
    public static bool IsValidEmailAddress(string emailAddress)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(emailAddress);
    }
}

Drie zaken die opvallen:

  1. We maken gebruik van de Microsoft.SqlServer.Server namespace. De Microsoft.SqlServer.Server bevat alle onderdelen die we nodig hebben voor CLR integratie. 
  2. We maken gebruik van het Attribuut SqlFunction. Aan dit attribuut geven we de volgende parameters mee :
    • DataAccess. Deze kan de waarde DataAccessKind.None, of DataAccessKind.Read bevatten. We voeren geen database acties uit, dus gebruiken we DataAccessKind.None 
    • IsDeterministic. Indien True wordt de output gecached op basis van de inputparameters en database state. We willen performance dus zetten we deze op true
  3. IsValidEmailAddress is static. Functies die binnen SQL Server worden gebruikt moeten static zijn.

Gebruik van de code in SQL Server

CLR integratie staat default uit. Middels onderstaande statements zetten we dit aan. Mocht je dit trouwens vergeten, geeft SQL Server zelf aan dat CLR integratie aangezet moet worden en ook hoe je dat moet doen.

EXEC sp_configure 'show advanced options' , '1';
go
reconfigure;
go
EXEC sp_configure 'clr enabled' , '1'
go
reconfigure;

Vervolgens registreren we onze Assembly.

CREATE ASSEMBLY CLRDatabaseFunctions FROM 'D:\CLRDatabaseFunctions.dll' WITH PERMISSION_SET = SAFE

We kunnen de functie IsValidEmailAddress niet direct aanroepen, daarom maken we gebruik van onderstaande functie(SQL) welke de CLR functie IsValidEmailAddress  wel aan kan roepen.

CREATE FUNCTION IsValidEmailAddress(@emailAddress nVarchar(255)) RETURNS bit
AS EXTERNAL NAME CLRDatabaseFunctions.DatabaseFunctions.IsValidEmailAddress

Nu kunnen we de foutieve emailadressen opvragen:

Select Contacts.* from Contacts WHERE  dbo.IsValidEmailAddress(Contacts.EmailAddress) = 0 

Dit geeft als resultaat het emailadres wat niet correct was ingevoerd.

 

Downloads en meer info

Via onderstaande links zijn de gebruikte voorbeelden te downloaden:

Verder kan je via onderstaande links meer informatie over dit onderwerp vinden:

Comments [0] | | #