Ok, altså jeg er interesseret i den bedste løsning når vi snakker om performance...jeg har implementeret den løsning jeg linkede til, og mine blokkerede IP'er ligger i min db...ved ikke om det er for resourcekrævende at lave et db kald hver gang?
Hvad ser du som den optimale løsning? Hvad ville du evt. rette i IHttpModul'et?
Ja, det med at hardcode IP'erne ind var også min første tanke...men det er en bestemt type af brugere, som skal have adgang til at blokkere andre brugere, og det skal de kunne ved blot at klikke på en knap, i forskellige UI, dvs. både via asp.net og flash, derfor lagde jeg IP'erne i db...men er det så skidt? Synes du jeg skal prøve, at læse/skrive til en txt-fil på serveren i stedet for? Vinder jeg meget på det tror du?
aarh...det er bare en collection, kunne i pricipper også bruge en arraylist eller lign...
hhmmm...Jeg er nok ikke helt med, når du skriver i ovenstående kode at jeg kan hente IPs fra db...Det må selvfølgelig være fordi at INIT metoden ikke bliver kaldt så ofte som OnBeginRequest...Men fortæl mig lige, hvor ofte/hvornår kaldes INIT metoden?
Dvs. hver gang en ny brugeren åben min side i fx. IE så kaldes INIT metoden, og de efterfølgende request i samme browser vindue tricker ikke INIT metoden?
nå for søren...ja det duer ikke umiddelbart...den skulle jo gerne virke, uden jeg behøves at pille ved serveren eller uploade noget på ny uden grund...
Hvordan laves det således, at collectionen KUN bliver fyldt op, hver gang en ny bruger viser siden?
Dvs. hvis vi ref. til din ovenstående kode, så mener du, at jeg skal indsætte et db kald i OnBeginRequest metoden? Eller hvad? I så fald, kaldes db jo for hvert request? Kan du give mig et eksempel, det tror jeg hurtigere jeg forstår...
// læs banlist fra fil eller database - her tildeler vi bare et par værdier banlist.Add("192.168.0.10", "Ingen adgang"); banlist.Add("192.168.0.11", "Forsvind");
hvis det ikke er en dårligere løsning, at bruge global.asax så virker det da meget mere lige til? Session_Start kaldes jo kun, for det første request, som tilhøre en given session...dermed kan man bare tjekke Ip'en via en stored procedure direkte der hver gang, når det er nødvendigt. Så slippen man for at holde styr på collections mv...eller er det bare mig som tror det er smart?? :)
Jeg er efterhånden med på alt det du har forklaret...dog har jeg misset én ting og det er, at når jeg ønsker, at opdaterer collectionen via db, så skal jeg jo tilgå collection i Http modulet fra et eller andet sted fra mit asp.net projekt...hvordan gør man det? (Hvis det er tilfældet, tror jeg det bliver en lidt besværlig løsning, når det også skal kunne kaldes fra flash)
Hvis du kun vil checke ved session start, så kan det lade sig gøre med HTTP Module. Men ved opslag i Dictionary så koster det ingenting at teste hver request.
Et opslag i DB ved hver session creation er langt dyrere end at loade alle ved start af web app.
"(og principielt behøver banlist ikke være en instans member længere, fordi request handleren også kan hente fra Application)"
Forstår ikke den sidste del, af det...
Men forstår at man kan tilgå request handleren via et key-index i Application, korrekt? Altså gemme handleren deri og derigennem tilgå banlisten? eller hvad?
hehe, OK! Så er jeg helt med! Det sidste problem er så bare, at jeg ikke kan se, hvordan jeg kan kaldes: (Dictionary<string,string>Application["banlist"]).Add(nyip, nytext); fra flash af...hehe...eller i hvert fald sætte noget i gang, som resulterer i det samme...
Hvis jeg nu siger, at jeg kan kalde en JS metode fra flash, kan det så bruges til et eller andet i denne sammenhæng? ved godt at alt det andet køre server side...
((Dictionary<string, string>)HttpContext.Current.ApplicationInstance.Context.Application["banlist"].... der er vel ikke forskel på din og min version? Det virker i hvert fald?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.