04. oktober 2003 - 23:15Der er
26 kommentarer og 1 løsning
Bedste maade at lave en FrontController
Som jeg kan se det er der tre indlysende (og dybt forskellige) fremgangsmaader at implementere et FrontController pattern i ASP.NET - da jeg ikke foer har implementeret en saadan mangler jeg selvf. erfaringen til at vaelge en fremgangsmade.
Jeg vil derfor hoere om der er nogle der har gjort sig nogle erfaringer med dette ??
De tre som jeg umiddelbart kan se: - GlobalAsax.Application_BeginRequest - IHttpModule.Init - IhttpHandler.ProcessRequest
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Jeg startede med at benytte Global.Application_BeginRequest, men fik desværre en del problemer ud af det :-( Blandt andet virkede sessions ikke mere, hvilket ikke kan siges at være optimalt.
Har ikke prøvet med IHttpModule.Init, men benytter nu IHttpHandler.ProcessRequest, hvilket må siges at virke perfekt. Jeg har endnu ikke oplevet nogen problemer, ved at benytte den metode - så den kan klart anbefales :-)
det maa siges at vaere et godt argument for at gaa uden om at bruge Global.Begin_Request, da man ellers selv skal til at lave sin tilstandshaandtering... og det har jeg proevet een gang uden saerlig meget held - det endte faktisk med en workaround :)
Mht. at bruge HttpHandler har jeg nogle problemer som i foerste omgang foerte mig til at kigge paa HttpModule loesningen.
Jeg har vanskeligheder ved at faa min handler implementering til at modtage samtlige requests for .aspx resourcer. Det jeg indtil nu har vaeret noedt til er at have en default.aspx liggende i samtlige dirs under rootdir og saa saette min web.config til at sende samtlige requests for disse default.aspx til min handler, og det maa siges at vaere meget lidt holdbart... jeg oensker at undlade at lave direkte links og istedet linke til ressourcer defineret udelukkende gennem directory url'er.
Det bliver nok lidt svært at løse, uden at skulle sætte IIS'en op på en lidt speciel måde. Jeg ville gerne lave det samme, og endda sådan at bibliotekerne ikke behøvede at være fysiske - dvs at de ikke behøvede at eksistere, da jeg havde alt i databasen. Det jeg så gjorde var som beskrevet ovenfor, og så satte jeg i mappings i IIS'en den til at * skulle håndteres af C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll - dvs af ASP.NET. På den måde har jeg fuldstændig kontrol over hvad der vises ved forskellige URL'er :-)
Yeps - tjekker på efternavnet af den forespurgte fil, og hvis det ikke er noget jeg har lyst til at håndtere, kigger jeg bare efter filen på disken, og hvis den findes sender jeg den bare afsted - det er faktisk ret blæret :-)
det maa vaere maaden at goere det paa... :) Men - hvis det saa er en forespoergsel paa en resource som din app. ikke skal haandtere, og du saa efterfoelgende leder og finder det paa disk - hvilken fremgangsmaade bruger du saa til at sende den til response objektet ?
/ DonPedro
note... jeg synes det er lidt en skam man ikke kan saette det op i web.config, men at man skal igennem IIS'en... :)
btw... du er allerede gaaet udover spoergsmaalets egt. ordlyd saa hvis du er interesseret i lige at hjaelpe med de sidste detaljer saa smider jeg gerne flere points i puljen (hvis det goer nogen egt. forskel) ?
- Properties >> Directory >> Configuration >> App mappings : jeg har tilfoejet en enkelt mapping med extension .* som peger på isapi_dll under frameworket. Alle andre mappings har jeg fjernet.
- min handler haandterer requests ved at hente en commmand fra min commandfactory og bruge denne til at lave en server.transfer på den url den specifikke cmd mappes til fra mit URL-map.
isapi_dll kan ikke haandtere child requests... dvs. at jeg fra min handler ikke kan kalde server.transfer da et server.transfer kald gaar gnm. IIS'en og videre derigennem til isapi_dll der er designet til at ikke at haandtere childprocessor af en eksisterende process (hvis jeg har forstaaet det korrekt).
skal man goere noget specifikt for at sikre threadsafety eller hvad ??
Er desvaerre ikke lige i naerheden af en Windows PC lige nu - og slet ikke min egen, saa jeg har lidt svaert ved at hjaelpe dig :-(
Kender ikke lige det eksempel du linker til, men det kunne jo vaere det ville vaere en god ide hvis jeg lige kiggede paa det engang - har trods alt ikke laest noget teori om emnet, og hvordan det er den bedste maade at skrue det sammen paa. Maa lige se om jeg faar tid engang...
Jeg bruger ikke Server.Transfer, da jeg enten henter mine sider fra en database, eller sender dem via en octet-stream.
Har lige skimmet ned over Microsofts implementation af FrontController. Så vidt jeg kan se er det overhovedet ikke meningen man skal bruge hverken Transfer eller Execute - som jeg brugte i min (ikke fungerende) implementation hvor jeg benyttede BeginRequest.
UrlMap.cs sørger jo for, at du kan vise de sider du vil (husk at indsætte dem i web.config).
MS's implementation bruger server.transfer i classen RedirectingCommand og det er dette kald der er aarsag til hele misaeren... siden skal jo ogsaa sendes igennem hele applicationen workflow for at virke korrekt.
Hmm... nu sidder jeg så selv og skal lave en side hvor ikke alt kommer fra databasen eller ligger som filer der blot skal sendes afsted - jeg har med andre ord en stak .aspx-filer som jeg gerne vil ha' udført...
Fandt du en løsning på problemet? Du skal nok få en stak points hvis du har en løsning :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.