Som några av våra läsare kanske noterat så uppstår ett lite speciellt problem med ASP.NET 2.0 efter det att man installerar ASP.NET 2.0 service pack 1 (hädanefter kallat SP 1). När vi läste genom listan över ändringar för SP 1 och installerade det på våra kundservrar så rapporterade några få kunder obskyra fel i sina sidor.
Det visade sig att problemet har att göra med hur man refererar till datakolumner med asp:Repeater, asp:DataGrid och asp:DataList. Innan installation av SP 1 så kunde man i VB exempelvis använda sig av Container.DataItem(”kolumnnamn”) för att referera till sitt data, men efter installation av SP 1 är det inte tillåtet längre utan Full Trust. Det är inte speciellt bra att använda Full Trust i delade miljöer, vi använder därför Medium Trust, så en annan metod att referera till sitt data behövdes.
Beteendet har därmed ändrats i och med SP 1. Om man använder det sätt som Microsoft rekommenderar för att refererera till datat, Databinder.Eval(Container.DataItem, ”kolumnnamn”), så fungerar det utmärkt i VB och C# både före och efter SP 1. Vi rapporterade detta till Microsofts Gold Partner-support som snabbt konstaterade att det var ett riktigt problem, reproducerade det i sitt labb, och bekräftade att våra antaganden var korrekta. De erbjöd sig till och med att kontakta våra kunder och förklara problemet, så de gick ”the extra mile” i ärendet. 🙂
En sak jag blev förbryllad över var skillnaden mellan VB och C#. I VB kunde man använda Container.DataItem() som en metod innan SP 1, medan C#-kompilatorn undrade vad jag höll på med, då Container.DataItem är en property och inte en metod. Det verkar vara någon form av syntaktiskt socker, då det faktiskt fungerade med SP 1 i Full Trust i VB, men med Medium Trust får man reflection exception. Microsofts supporttekniker publicerade en artikel om detta som förklarar detaljerna.
Microsoft lovade även att lägga upp en KB-artikel men det kan dröja lite, då Loopia tydligen var först med att rapportera detta problem.
Först, stort tack för att ni börjat blogga. Skriv gärna mer om ASP.NET-relaterat och serverhosting.
När släpptes egentligen SP1 till ASP.NET 2.0? Och när tänker ni uppdatera till 3.5?
Glöm inte heller att lägga in följande stycke i kunskapadatabasen som ni sa att ni skulle göra i juli 2006. Har bloggat lite om det och publiserat delar ur mailkonversationen:
http://codeodyssey.se/blog.aspx?id=405
Jag tycker ni borde ta bort mapparna ”public_html” samt ”data”, eftersom de inte fyller någon funktion. I alla fall inte i mediom trust med ASP.NET, som mitt blogginlägg visar.
Jag brukar oftast vilja ha samma filstruktur på mina lokala projekt och det innebär att jag får massa sajter som heter ”public_html” i Visual Studio för de som hostas hos er. Nu har jag lagt ner det och har en annan struktur lokalt utan de onödiga mapparna. Skulle vara skönt att bli av med dem på servrarna också. Eller har ni något skäl till varför de behövs?
Sen har jag märkt att ni har satt ”Trust level: LoopiaCustom”. Vad innebär det, några skillnader från medium?
codeodyssey: SP1 släpptes 2007-11-19 till Windows XP via Windows Update för att sedan följas av Windows 2003 och de övriga OS:en löpande.
Uppdateringen till ASP.NET 3.5 kräver faktiskt att man lägger in ASP.NET 2.0 SP1 så vi är på väg till 3.5 även om jag inte kan ge ett exakt datum ännu.
Angående public_html så kan jag förstå att det kan bli lite krångligt med flera sites i VS, men alla våra kunder använder inte ASP.NET, även om det vore mycket trevligt. 🙂
ASP och PHP används i ganska stor omfattning på våra Windows-servrar och dessa skriptspråk har inte samma mekanismer för åtkomst som ASP.NET har. En annan anledning är operativsystemsbyte. Även om operativsystemsbyte möjligen är en nyhet för andra webbhotell så har vi erbjudit det i flera år och vi ser att en standard för katalogstrukturen är fördelaktigt.
Våra Medium Trust-modifikationer kan man läsa om i vår kunskapsdatabas, se http://support.loopia.se/kb234