PerSalmi.NET

Swedish .Net software developer...
# Monday den 6 October 2008

Så kunde tidningsrubriken ha sett ut om det hela hamnat i kvällspressen…

image

Hur går det då till när man blir svårt biten av AutoEventWireup? Jo, just nu jobbar jag med en kund där vi driver flera projekt för att lyfta applikationer till nyare run-time plattform. Just den applikation som vållade rejält huvudbry är en ASP.NET applikation som ska migreras från .Net 1.1 till modern 3.5 miljö. Allt väl så långt, Visual Studio 2008 och den inbyggda wizarden hade inga som helst problem att uppgradera projektet. Det var givetvis en del varningar om uppdaterade APIer för klientscriptblock mm, men det var inga problem att fixa.

Till en början såg det också ut som applikationen fungerade hyffsat, det visade sig dock att så inte riktigt var fallet. Något skumt inträffade när man ville gå vidare och detaljstudera information som laddats från en databas via COM-objekt som inte rörts i uppgraderingen, COM-delarna var C++ baserade och ingick i ett annat projekt. Ok, då är det väl något problem med COM-objekten när de anropas via COM Interop från .NET CLR under 2.0 tänker man och börjar debugga.

Debuggingen tog tid… Allt såg rätt ut på .NET sidan, anropen till COM-lagret gav förväntade resultat tillbaks till .NET applikationen i de första stegen, men i övergången mellan två aspx-sidor verkade något mycket skumt hända. Efter övergången var allt man fick tillbaks från COM anropen tomma strängar. Hade vi lyckats trigga något fel för att vi låg på gränsen till något som ändrats drastiskt mellan .NET 1.1 och 2.0? Nej, verkade inte så… Debugging ner i COM-lagret gav inte direkt några ledtrådar heller. Det hela började kännas mycket skumt. Varför funkade 1.1 versionen av applikationen så bra medan den konverterade 2.0 versionen visade tomma fält utan att generera några exceptions eller felmeddelanden? Allt funkade ju men ändå inte.

Till sist började jag om från början med debuggingen och satte brytpunkter i varenda metod i code-behind filerna för alla sidor som var inblandade i scenariot som uppvisade fenomenet med de tomma fälten. Pang! Där var problemet! För länge sedan hade någon implementerat en Page_Unload metod i code-behind filen och mappat upp eventet i InitializeComponent vilket var påbjudet i 1.1. Sedan hade den utrensning av dataobjekt som skedde i Page_Unload fått gå i pension när applikationen byggdes ut och mappningen av eventet till Page_Unload handlern hade tagits bort medan själva koden för Page_Unload fick ligga kvar, den kunde ju vara bra att ha nångång… I just det här fallet var den inte så bra att ha, vid konverteringen av projektet mellan 1.1 och 2.0 så ändrar nämligen Visual Studio standardbeteendet på inställningen av AutoEventWireup från false till true, det gör i sin tur att Page_Unload koden som legat och slumrat i godan ro nu vakande till och fick chansen att exekvera just vid växlingen mellan två sidor där jag satt och debuggade.

Det är ju klart att om man helt plötsligt kör lite kod som tömmer alla laddade dataobjekt och sen visar de tomma strukturerna i ett formulär så är det inte mycket mer än tomma fält att förvänta sig. Slutsatserna av det hela blir:

  • Använd ordentlig versionshantering
  • Ta bort kod som inte ska användas

Kom ihåg! Du kan plocka tillbaks gammal kod från versionshanteringen om du skulle behöva det, men spar den inte i det levande dokument som koden faktiskt är.

En liten reflektion om sökmotorer som kommer upp just vid denna debugsession är att det gäller att drabbas av ett fel vid rätt tidpunkt, eller man kanske ska uppgradera sina projekt vid rätt tidpunkt. För Google och de andra motorerna prioriterar givetvis träffar som är aktuella tidsmässigt, mitt problem visade sig finnas dokumenterat på en del sidor men de var inte direkt aktuella, det är ju något år sedan uppgradering mellan 1.1 och 2.0 var hett, så jag fick inte träff på de beskrivningar som låg nära mitt verkliga problem med den ändrade standardinställningen för AutoEventWireup förrän mycket långt ner i sökresultaten. Och det är väl knappt någon som tittar längre på sökresultatlistorna än 10-20 träffar neråt… grejer som får sämre ranking än så kan väl inte vara något att ha… :-)

Ett par länkar till info om AutoEventWireup i alla fall då, så det blir lite teknisk slutknorr på detta:

Blog & Contact
Per Salmi
Per Salmi
Min LinkedIn Profil

Jag arbetar på Combitech AB i Linköping med konsultuppdrag och utbildning inom Microsoft .NET området. Kontakta mig gärna om ni har frågor, behov av konsulttjänster eller är intresserade av utbildning inom .NET.

Copyright © 2018 Per Salmi

Bloggmotor: newtelligence dasBlog 2.3.12105.0

Sign In
Statistics
Total Posts: 220
This Year: 0
This Month: 0
This Week: 0
Comments: 40

Datorer
All Content Copyright © 2018, Per Salmi