RSS 2.0
# Tuesday, February 20, 2007

SQL Server 2005 is al weer toe aan z'n 2e service pack. Deze is te downloaden van http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/servicepacks/sp2.mspx. Een nieuwe versie van de SQL Server 2005 Books Online kun je vinden op http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx.

Tuesday, February 20, 2007 9:45:04 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
Nederlands | SQL Server
# Monday, February 19, 2007

Het is heel gewoon om classes in een library public te maken, maar eigenlijk is dit helemaal niet handig. Dat betekent namelijk dat de class vanuit alle code die de library gebruikt beschikbaar is. Met andere woorden de class maakt onderdeel uit van de interface van de library. Er zijn meerdere redenen waarom dit onwenselijk is:

  1. De interface is onnodig groot en voor gebruiker van de library kan het daarom onduidelijk zijn welke classes gebruikt moeten worden.
  2. Het is veel lastiger om te achterhalen welke verbindingen er bestaan tussen de library en eventuele clients. Dit is bijvoorbeeld lastig bij refactoring.
  3. Het is in een client mogelijk om een sub-class te maken, terwijl dit wellicht niet de bedoeling is.

Veel beter is om classes internal te maken. Dit is ook standaard zo als je geen access modifier plaatst. Daarmee zijn classes alleen beschikbaar voor code binnen dezelfde assembly (tenzij men reflection gebruikt).

Het is verstandig om opo dezelfde manier even stil te staan bij class members. Die zijn standaard private, en als je dat verandert kun je ze protected (alleen beschikibaar voor de class zelf en sub-classes), internal, protected internal (protected of internal) of public maken. Als je dit consequent toepast kun je ook reflection tegengaan door de class te markeren met [ReflectionPermission(SecurityAction.Deny)]. Daarmee is de boel niet alleen veel handiger, maar ook veel veiliger.

Monday, February 19, 2007 3:19:15 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.NET | Nederlands
# Monday, February 12, 2007

Ik zie in code geregeld dat het Session object op allerlei plaatsen gebruikt wordt, met name in pagina's en controls, als volgt:

public void Page_Load(object sender, EventArgs e)
{
    Session["MySessionVar"] += 1;
}

public void Page_PreRender(object sender, EventArgs e)
{
    Label1.Text = Session["MySessionVar"].ToString();
}

Dit is om meerdere redenen niet aan te raden:

  1. Omdat de collectie loosely typed is, is er geen compile-time check bij het benaderen van de elementen in de collectie. Het is daarom heel makkelijk om een typfoutje te maken, waardoor je tegen het verkeerde object aan praat.
  2. Door elementen in het Session object te stoppen in de pagina, is er geen centrale administratie van de namen (keys) die in gebruik zijn.

Je kunt beide zaken oplossen door een centraal object te maken waarmee je de elementen in het Session-object benaderd, als volgt:

/// <summary>
/// Strongly typed toegang tot Session-object.
/// </summary>
internal static class TypedSession
{
   public static int MySessionVar
   {
      get
      {

         object o = 
HttpContext.Current.Session["MySessionVar"];
         if(o == null) return 0;

         return (int)o;
      }
      set
      {
         HttpContext.Current.Session["MySessionVar"] = value;
      }
   }
}

public void Page_Load(object sender, EventArgs e)
{
TypedSession.MySessionVar += 1;
}

public void Page_PreRender(object sender, EventArgs e)
{
Label1.Text = TypedSession.MySessionVar.ToString();
}

Merk op dat bij de get-accessor eerst gekeken wordt of het object null is. Dit is nodig omdat een int niet null mag zijn. Voor objecten waarvoor dat wel mag kun je desondanks besluiten dat er een standaardwaarde moet zijn, bijvoorbeeld een nieuw object.

Deze methodiek werkt ook uitstekend voor de Request.QueryString collectie en meer van dat soort collecties die je normaal gezien loosely typed gebruikt. Die zal je niet zo snel centraliseren, omdat het juist op een bepaalde pagina van toepassing is, maar daarmee strongly typed kunnen werken is nog steeds minder foutgevoelig. Bovendien hoeft de ontwikkelaar niet te weten waar de data vandaan komt.

Monday, February 12, 2007 11:40:18 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.NET | ASP.NET | Nederlands
# Wednesday, January 31, 2007

Onlangs kreeg ik de volgende melding in Visual Studio 2005: The project file ' ' has been renamed or is no longer in the solution. Hierdoor was het niet meer mogelijk om ook maar iets van het project te bouwen. Het vervelende aan dit probleem is dat je geen idee hebt wat er nu eigenlijk aan de hand is. Na enige tijd vond ik uit dat dit gebeurt als een Web Project referenties bevat naar assemblies of projecten die het niet kan vinden. Je lost dit als volgt op:

  1. Rechts-klik op het Web project en kies Property Pages.
  2. Er verschijnt een venster met alle referenties, zowel naar de bin-map, GAC of andere projecten in de solution.
  3. Verwijderer de referenties gemarkeerd met (unavailable).
  4. Waarschijnlijk kun je nu niet bouwen omdat je assemblies mist. Als je de referenties daar naartoe maakt zou alles moeten werken.
Wednesday, January 31, 2007 4:42:56 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
ASP.NET | Development | Nederlands

We were recently faced with the error message The project file ' ' has been renamed or is no longer in the solution in Visual Studio 2005. The problem is that from this message you have no idea what is actually the matter. We finally figured out that this happens when a Web Project contains references to assemblies or projects it can't find. Here's how you solve this:

  1. Right click the Web project and select Property Pages.
  2. A window will open which lists all the references, either to the bin-folder, GAC or other projects in the solution.
  3. Remove those that show (unavailable) behind it.
  4. Chances are that now you can't build because the reference is not there. Simply add the reference again and you should be OK.
Wednesday, January 31, 2007 4:36:21 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [9] -
ASP.NET | Development | English

XQuery 1.0 en XSLT 2.0 hebben heel lang op zich laten wachten. Al drie jaar geleden wilde ik een boek schrijven over XQuery en toen was volgens W3C de specificatie bijna klaar. Dat "bijna" was dus een ruim begrip... maar goed, ze hebben nu eindelijk W3C Recommendation status verworven. Moet ik de voorgestelde inhoudsopgave voor m'n te schrijven XML boek helaas wel aanpassen :(.

Wednesday, January 31, 2007 3:57:44 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
Development | Nederlands | XML

Hoera! ASP.NET Ajax 1.0 is beschikbaar. Met ASP.NET Ajax kun je pagina's maken die alleen die delen van de pagina verversen die ook daadwerkelijk gewijzigd moeten worden. Dat scheelt netwerkverkeer, maar maakt bovendien de gebruikerssinterface veel mooier.

Maar, het is nog beter. Microsoft geeft ook de source code vrij van ASP.NET Ajax! Je kunt de source code hier downloaden. De source code wordt uitgegeven onder de Microsoft Permissive License (Ms-Pl), die het toestaat om de broncode aan te passen en in aangepast vorm te gebruiken en te verspreiden. Dat smaakt dus min of meer als open source.

Wednesday, January 31, 2007 9:04:04 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
ASP.NET | Nederlands
# Tuesday, January 30, 2007

Onlangs schreef ik ASP.NET 2.0 - de basis, een boek voor de beginnende ASP.NET ontwikkelaar. In dezelfde serie ga ik nu ook nog een boek schrijven over mijn oude liefde XML. 6 jaar geleden heb ik al eens een boek geschreven over XSLT, Sams Teach Yourself XSLT in 21 Days, en nu komt daar een soort vervolg op voor mij. Ik vind het daarom leuk dat de uitgever mij gevraagd heeft of ik het XML boek in de serie voor m'n rekening wilde nemen. De goede samenwerking rond het ASP.NET boek was voor mij een belangrijke reden om daarop "ja" te zeggen.

Tuesday, January 30, 2007 12:01:10 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
Nederlands | XML

Van 25 t/m 29 maart is in San Fransisco VSLive (ASPLive) waar ik twee sessie ga doen over ASP.NET:

  • Understanding Multi-Threading (in ASP.NET)
  • Creating Scalable Apps with Asynchronous Processing

De eerste sessie gaat in op het feit dat ASP.NET een multi-threaded omgeving is en bekijkt wanneer en hoe dat relevant is voor ons als (web) ontwikkelaars. De tweede sessie bespreekt asynchronous pages, handlers en modules, waarmee je de schallbaarheid van je applicatie kunt verbeteren zonder extra hardware. Zie voor meer informatie de sessieomschrijvingen op de site van VSLive.

Tuesday, January 30, 2007 11:52:13 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
ASP.NET | Evenementen | Nederlands

I've been invited to speak at VSLive in San Fransisco ASPLive from March 25 to March 29. I will be doing two sessions on ASP.NET:

  • Understanding Multi-Threading (in ASP.NET)
  • Creating Scalable Apps with Asynchronous Processing

The first session takes a closer look at the fact that ASP.NET is a multi-threaded environment and what that means for us (web )developers. The second session looks at asynchronous pages, handlers and modules, to increase the scalability of our apps without adding new hardware. For more information checkout the session abstracts on the VSLive site.

I hope to see you there.

Tuesday, January 30, 2007 11:45:51 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
ASP.NET | English | Events
Sign In

Archive
<February 2007>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910
About
This is the blog of Michiel van Otegem, a Senior Software Architect with Sogeti Netherlands, and author of several books and numerous articles on (ASP).NET, XML, and related technologies.
Disclaimer

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

© Copyright 2012
Michiel van Otegem
All Content © 2012, Michiel van Otegem
DasBlog theme 'Business' created by Christoph De Baene (delarou)