mandag den 7. juli 2014

VB.NET kan ikke finde ud af Attributes

Som systemudvikler oplever man mange sjove ting.
Da vi desværre nuværende arbejder i webforms, er json kald nødvendige at lave som webmethods.
En webmethod bliver lavet som static / shared (i vb.net) fordi du så ikke skal have en instans af siden for at kalde den.
Det betyder så også at du ikke har adgang til de data på din klasse/objekt etc. som du er vant til.
Man kan dog dele sin session med sin webmethod, men her skal man være en opmærksom udvikler, for i vb.net har man sin egen syntaks.

Desværre for C# udvikleren oplevede jeg at den ikke ville udføre det korrekt, undtagen når jeg debuggede.
Vi har et user objekt i sessionen, og den har et menu-objekt til at holde styr på en masse.
Hvis jeg bare kørte siden, kunne den ikke få fat på dette menu-objekt, men så snart jeg debuggede så virkede det og den fandt værdierne.
Så snart jeg slukkede for debugging så kunne den ikke læse værdierne igen.

Det viste sig at være forskel i attributes fordi det er vb.net der har sin egen syntaks.
Jeg startede med denne syntaks:
<System.Web.Services.WebMethod(True)> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
        <
        Public Shared Function GetPermissions(ByVal textID As String, ByVal rootPath As String, ByVal ParentTextID As String, ByVal DotNet_Type As String, ByVal DisplayColumn As String) As PermissionsInfo

Ovenstående fungerede ikke!

Denne syntaks endte med at fungere.
<WebMethod(Description:="Per session Hit Counter", _
       EnableSession:=True)> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _

Ovenstående FUNGERER KORREKT!

Den fungerede og nu kunne min side pludseligt altid få fat i de data fra menu-objektet.

Forskellen er hvordan du definerer EnableSession-værdien, og det var denne der gjorde om det virkede permanent eller ej.
Derfor man nogle gange kan blive en træt systemudvikler for det fungerer ikke altid som det burde.

Ingen kommentarer:

Send en kommentar

Kan du lide mit indlæg, har en kommentar, forslag eller andet på hjerte så skriv venligst